루트 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에만 적용됩니다.
굴절
- http://httpd.apache.org/docs/2.2/mod/mod_alias.html
- https://httpd.apache.org/docs/trunk/rewrite/avoid.html
이전에는 다음과 같은 코드를 사용하여 각 도메인 / 하위 도메인의 루트 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>
루트 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
'IT story' 카테고리의 다른 글
DbContext.Database.SqlQuery를 사용하는 방법 (0) | 2020.04.12 |
---|---|
HttpClient 제공 업체가 없습니다. (0) | 2020.04.11 |
vim에서 C 코드를 자동 서식 / 인 덴트하려면 어떻게해야합니까? (0) | 2020.04.11 |
ViewPager에서 조각 검색 (0) | 2020.04.11 |
Java로 파일을 재귀 적으로 나열 (0) | 2020.04.11 |