2013-06-13 2 views
1

내가 작업하고있는 Wordpress 사이트는 하위 디렉토리로 이동하므로 다른 사이트의 모든 링크가 더 이상 작동하지 않습니다. 나는 .htaccess로 301 리다이렉트를 구현했다. 문제가 해결 되었기 때문에 위의 루트 디렉토리에 index.html이있다. 내 클라이언트가 방문하기를 원한다.301 전체 사이트를 index.html 방문 페이지를 제외한 새 디렉토리로 리디렉션

그렇다면은 들어오는 링크를 수정하기 위해 모든 트래픽을 하위 디렉토리로 리디렉션하도록 설정하려면 어떻게해야합니까? 방문 페이지가 있기 때문에 루트 디렉토리의 index.html을 제외하고 말입니다.

어떻게 htaccess가 잘 작동하는지 모르겠지만 지금 당장 가지고 있습니다.

Order deny,allow 
ErrorDocument 404 /404.php 
DirectoryIndex index.php index.html 

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/$ [OR] 
RewriteRule ^.*$ http://example.com/portal/$0 [R=301,L] 

감사합니다.

명확화를 위해 편집 : 지금 당장은 모든 것이 루트에서 하위 디렉토리로 리디렉션됩니다. 루트 디렉토리에 index.html을 제외하고 모든 것이 리디렉션되기를 원합니다. 사용자가 페이지를 지정하지 않고 도메인 이름 (http://example.com) 만 요청하면 그 사용자는 루트 디렉토리의 index.html 페이지에 게재되기를 바랍니다.

+0

가능한 해결책은 http://stackoverflow.com/questions/2226364/trying-to-put-an-exception-to-rewriterule-in-htaccess를 참조하십시오. – Floris

+0

질문을 편집하여 완료했거나 의도 한대로 작동하지 않습니다 ... 사람들은 먼저 솔루션을 제안하기 전에 착오가 무엇인지 먼저 파악해야합니다. – Floris

+0

사과드립니다. 이게 더 명확한가요? – Tamerax

답변

1

다음 코드는 당신이 무엇을 요구하지 않습니다 "(즉, 아무것도) (그리고 경기가 대소 문자를 구분하지 않습니다) 다음 다른 위치까지 제공"/ "요청이 중 index.php 또는 index.html 또는 일치하지 않는 경우"

Order deny,allow 
ErrorDocument 404 /404.php 
DirectoryIndex index.php index.html 

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/index\.(php|html) [NC] 
RewriteCond %{REQUEST_URI} !^/$ {NC] 
RewriteRule ^.*$ http://example.com/portal/$0 [R=301,L] 

나는 다음 테스트 케이스를 사용하여 우수한 온라인 테스트 도구 http://htaccess.madewithlove.be

를 사용하여이 테스트 한 :

http://example.com    -- no rewrite, second condition not met 
http://example.com/    -- ditto 
http://example.com/index.html  -- first condition not met 
http://example.com/index.php  -- first condition not met 
http://example.com/some/page.html -- rewritten as http://example.com/portal/some/page.html 

EDIT 당신은 이것이 여전히 예상대로 작동하지 않는다고 말했습니다. 그래서 나는 큰 총을 꺼내왔다. 재 작성 엔진이 지침

RewriteLog "/var/log/apache2/rewrite.log" 
RewriteLogLevel 9 

으로 수행 모든 것을 "최대 로깅"을 설정하여 다음

으로 터미널 창에서 로그 파일의 끝에서 찾고, (어떤 경로 당신은 분명 원하는 선택)
tail -f /var/log/apache2/rewrite.log 

정상적으로 작동하지 않는 부분을 빠르게 볼 수 있습니다. 약간의 손길이 쳐서 다음 코드로 연결되었습니다. 요청 된 URI 그냥 /index.html 또는 /index.php, 또는이 /portal로 시작, 또는 경우가 비어있는 경우, 다음 리디렉션하지 않는 경우 "라고

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/index\.(php|html) [NC] 
RewriteCond %{REQUEST_URI} !^/portal.*$ [NC] 
RewriteCond %{REQUEST_URI} !^/$ [NC] 
RewriteRule ^(.*)$ http://example.com/portal$0 [R=301,L] 

이 경우가 나를 위해 일한 시험은 -. 그들이 작동하는지 확인 !. 당신을 위해

참고 : - 기본 나는 httpd.conf 파일에서 이러한 변화는, 루트 디렉토리의 .htaccess 파일에 당신은 너무 루트 디렉토리에있는 .htaccess 파일 읽기 짝수하기 위해주의 할 필요가 없습니다했다 아파치 설정은 그 디렉토리에 대해 Override none을 가지고 있으므로 약간의 추가 작업이 필요합니다. 이온 교환을 수행하면 (sudo apachectl restart 명령을 실행하면) 어려움을 피할 수 있습니다. 귀하의 웹 사이트를 호스팅하는 사람과 귀하가 보유하고있는 통제에 따라 귀하에게 해당되지 않을 수 있습니다.이 문제에 대한 전문가가 superuser.com에서 찾을 수있는 시점이 올 수 있습니다. 그러나 나는 이것이 당신을 속여 주길 바랍니다.

+0

굉장! 정확히 example.com/index.html을 내 주소로 지정하면 작동합니다. 방금 example.com을 입력하면 index.html을 건너 뛰고 리디렉션이 시작됩니다.이 문제를 해결할 수있는 방법이 있습니까? 정말 고마워요! – Tamerax

+0

명확히하기 : 사람들이 루트 (확장자 없음)를 요청하면'index.html'을 요청할 때뿐만 아니라'index.html'로 리디렉션하고 싶습니까? – Floris

+0

정확히 내가 무엇을 찾고 : D – Tamerax

관련 문제