IT story

루트 URL을 하위 디렉토리로 리디렉션하기위한 .htaccess 재 작성

hot-time 2020. 4. 11. 10:16
반응형

루트 URL을 하위 디렉토리로 리디렉션하기위한 .htaccess 재 작성


www.example.com

직접 가다

www.example.com/store

여러 비트의 코드를 시도했지만 아무것도 작동하지 않습니다.

내가 시도한 것 :

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.example\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]

내가 뭘 잘못하고 있죠?


^ $사용 하여 루트를 나타내는 다시 쓰기 규칙을 사용 하여 다음과 같이 루트를 / store 디렉토리에 다시 쓸 수 있습니다.

RewriteEngine On
RewriteRule ^$ /store [L]

아무도 이것을 언급하지 않은 것에 놀랐습니다.

RedirectMatch ^/$ /store/

기본적으로 루트 URL과 루트 URL 만 리디렉션합니다. 답변은 이 링크 에서 시작되었습니다


이 시도:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^$ store [L]

방문 브라우저에 리디렉션 된 URL이 표시되도록하는 외부 리디렉션을 원할 경우 R플래그도 설정하십시오 .

RewriteRule ^$ /store [L,R=301]

다음은 하위 디렉토리로 리디렉션하는 데 사용한 것입니다. 이것은 보이지 않고 기존 파일과 일치하는 요청을 통해 여전히 허용합니다.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteRule ^(/)?$ subdir/index.php [L]

값으로 site.com 및 subdir을 변경하십시오.


루트에서 하위 폴더로의 보이지 않는 리디렉션을 설정하려면 /root/.htaccess에서 다음 RewriteRule을 사용할 수 있습니다.

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ /subfolder/$1 [NC,L]

위의 규칙은 내부적으로 브라우저를 다음에서 리디렉션합니다.

브라우저는 루트 폴더에 남아 있습니다.


URL을 다시 작성하고 원래 URL을 숨기려는 경우 다른 대안 :

RewriteEngine on
RewriteRule ^(.*)$ /store/$1 [L]

이것으로 예를 들어 type http://www.example.com/product.php?id=4인 경우 파일을 투명하게 열지 http://www.example.com/store/product.php?id=4만 사용자에게 전체 URL을 표시하지 않습니다.


가장 간단한 해결책 인 것 같습니다.

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

다른 솔루션 중 일부와 함께 리디렉션 루프가 발생했습니다.


귀하의 질문을 이해하지 못합니다 ...

모든 요청을 하위 폴더로 리디렉션하려는 경우 :

RewriteRule ^(.*)$ shop/$1 [L,QSA]

http://www.example.com/* -> wwwroot/store/*

도메인 이름이있는 하위 폴더로 리디렉션하려는 경우

RewriteCond %{HTTP_HOST} ([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ %1/$1 [L,QSA]

http://www.example.com/* -> wwwroot/example.com/*

순환 리디렉션을 피하려면 리디렉션 범위를 루트 디렉토리로 제한하는 것이 중요합니다. 나는 다음을 사용했을 것이다.

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

위의 솔루션은 대부분 정확하지만 리디렉션의 투명성이 누락되었습니다.

필자의 경우 www.example.com을 방문 하면 URL을 www.example.com/store로 업데이트하지 않고 하위 디렉토리 / store로 리디렉션하려고했습니다 . (내가 원하는 것은 해당 디렉토리에서 페이지 코드를 얻는 것입니다). 그런 경우 아래 솔루션이 완벽하게 작동합니다.

RewriteEngine on
RewriteCond %{HTTP_HOST} example\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /store/$1 [L]

출처 : http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory


이 목적으로도 리디렉션 을 사용할 수 있습니다

Redirect 301 / www.example.com/store

또는 매핑을위한 별칭

Alias / /store

편집 : mod_alias는 httpd.conf에만 적용됩니다.

굴절


이전에는 다음과 같은 코드를 사용하여 각 도메인 / 하위 도메인의 루트 URL을 해당 하위 / 도메인으로 정확하게 이름이 지정된 해당 하위 디렉토리로 리디렉션합니다.

RewriteCond %{HTTP_HOST} ^sub1.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub1.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

그러나 다른 하위 또는 도메인을 추가하려면 위 코드에 추가해야합니다. 아래와 같이 와일드 카드 (*)처럼 작동하도록 단순화하는 것이 훨씬 편리해야 합니다.

RewriteCond %{HTTP_HOST} ^sub
RewriteCond %{REQUEST_URI} !/subs/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

따라서 하위 도메인 이름에 하위 접두사 (sub3.domain1.com, sub1.domain3.com 등) 가있는 한 다른 하위 도메인 / 도메인이 추가 될 때마다 코드는 계속 유효합니다.


게시 한 코드의 주요 문제는 다음과 같습니다.

  • 첫 번째 줄은 엄격하게 sample.com으로 시작하는 호스트에서 일치하므로 www.sample.com은 일치하지 않습니다.

  • 두 번째 줄은 하나 이상의 문자를 원하고 그 뒤에도 일치하지 않는 www.sample.com이 필요합니다 (첫 번째 w를 왜 탈출 했습니까?)

  • 포함 된 규칙 중 어느 것도 목표에 지정한 URL로 리디렉션되지 않습니다 (또한 샘플은 samle로 철자가 틀리지 만 관련이 없습니다).

참고로 현재 가지고있는 코드는 다음과 같습니다.

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^sample.com$
RewriteRule (.*) http://www.sample.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.sample\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]

약간의 인터넷 검색 결과는 다음과 같습니다.


RewriteBase On RewriteBase /
RewriteRule ^ index. (. *)? $ http://domain.com/subfolder/ [r = 301]

그러면 파일의 존재 여부에 관계없이 index.something 파일에 대한 액세스 시도가 하위 폴더로 리디렉션됩니다.

또는 이것을 시도하십시오 :

RewriteCond % {HTTP_HOST}! ^ www.sample.com $ [NC]
RewriteRule ^ (. *) $ % {HTTP_HOST} / samlse / $ 1 [R = 301, L]

.htaccess 파일에서 많은 리디렉션을 수행하지 않았으므로 이것이 작동하는지 확실하지 않습니다.


htaccess에서 아래 줄을 사용하십시오.

참고 : default.html의 이름을 확인해야 할 수도 있습니다.

default.html은 기본적으로 루트 폴더에로드되는 파일입니다.

RewriteEngine

Redirect /default.html http://example.com/store/


이를 달성하기위한 가능한 해결책 중 두 가지 방법은 다음과 같습니다. 1. .htaccess루트 폴더에 아래와 같이 파일을 작성하십시오 (example.com 및 my_dir을 해당 값으로 바꾸십시오).

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_dir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_dir/index.php [L] 
</IfModule>
  1. 루트 URL“/”만 다른 폴더 나 URL로 리디렉션하려면 RedirectMatch를 사용하십시오.

    RedirectMatch ^ / $ http://www.example.com/my_dir


이 코드를 .htaccess 파일에 추가하기 만하면됩니다.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /folder/index.php [L]
</IfModule>

나는 다른 가능한 구문 (다른 답변들 중 많은 것들이 있음)을 지적하는 것이 아니라 한 번 다루어야했던 것을 지적함으로써 원래의 질문에 대답 할 것입니다.

What am I doing wrong?

% {HTTP_HOST}이 (가) 올바르게 채워지지 않았거나 전혀 채워지지 않았을 수 있습니다. 비록 일부 사용자 정의 패치 아파치 2.2가있는 공유 호스트의 한 컴퓨터에서만 발생하는 것을 보았지만 그럼에도 불구하고 가능성이 있습니다.


파일이 루트에 존재하지 않으면 하위 디렉토리를 시도합니다. 루트 수준에서 실행될 것으로 예상되는 기본 .html 웹 사이트를 이동하여 하위 디렉토리로 푸시 할 때 필요했습니다. 모든 파일이 평평한 경우에만 작동합니다 (하위 디렉토리에 .htaccess 속임수가 없음). css 및 js 파일과 같은 링크 된 항목에 유용합니다.

# Internal Redirect to subdir if file is found there.
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s
RewriteCond %{DOCUMENT_ROOT}/subdir/%{REQUEST_URI} -s
RewriteRule ^(.*)$ /subdir/$1 [L]

참고 URL : https://stackoverflow.com/questions/990392/htaccess-rewrite-to-redirect-root-url-to-subdirectory

반응형