2013-12-17 2 views
0

전체 도메인 (수백 페이지 포함)을 다른 도메인의 동일한 폴더로 리디렉션하려고합니다. 이 사이트는 꽤 페이지 URL의 생성을한다 RewriteCond를 사용하는 CMS 사용리디렉션 301 RewriteCond와 함께 서브 디렉토리

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 

이 내 리디렉션와 충돌 할 것입니다. redirect 301 /folder/ http://www.site.invalid/folder/을 사용하면 페이지가 http://www.site.invalid/folder/index.php?q=folder/pagename.html으로 리디렉션되어 404를 반환합니다.

올바른 방향으로 나를 가리킬 수 있습니까? 대신이 같은 301를 사용

+0

충돌하는 것으로 생각되는 다른 RewriteCond를 제공하십시오. – nrathaus

+0

안녕하세요, 다른 재 작성이 없습니다. 원본 사이트에는 리디렉션 만 있고 리디렉션 대상 사이트에는 위의 행만 있습니다. – bolvo

답변

2

:

redirect 301 /folder/ http://www.site.invalid/folder/ 

과 같은 301를 사용하고 다른 재 작성하기 전에 배치 해보십시오 :

RewriteRule ^/folder/(.*)$ http://www.site.invalid/folder/$1 [R=301,L] 

기본적으로 지금 무슨 일이 일어날 지이 규칙을 것입니다 먼저 실행하고 301 리디렉션 (R = 301 플래그가 있기 때문에)을 수행하고 마지막 플래그 (L)가 있기 때문에 서버가 더 이상 재 작성을 처리하지 않게됩니다. 이 같은 전체 htaccess로 유지

RewriteEngine On 

RewriteRule ^/folder/(.*)$ http://www.site.invalid/folder/$1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 
+0

작동하는지 알려주세요 – Nick

+0

감사합니다. Nick, 게시물 덕분에 지금까지 : 'code'RewriteEngine on RewriteRule^(. *) $ http : //www.site.invalid/folder /index.php?q=$1 [L]'code' 이제 페이지는 http : //www.site.invalid/folder/index.php? q = 페이지 이름으로 리다이렉트되어 이미 페이지를 보여 주지만 ' URL을 prettify. 새 사이트에서 rewriterule을 사용해야하는 이유가 무엇인지 잘 모르겠습니다. 아무 것도하지 않고 작동하지 않는 것 같습니다. 루트에있는 콘텐츠가있는 다른 사이트에서는 솔루션이 작동하지 않습니다. 리디렉션은 http : //www.site.invalid/folderindex.php? q = pagename (폴더 다음에 슬래시가 없습니다!) – bolvo

+0

사이트 1의 리디렉션은 예쁜 URL로 리디렉션되어야합니다. 그런 다음 사이트 2에서 URL을 읽고 올바른 페이지로 보내려면 다시 작성해야합니다. [참조 : mod_rewrite, URL 재 작성 및 "예쁜 링크"설명] (http://stackoverflow.com/questions/20563772/reference-mod-rewrite-url-rewriting-and-pretty-links-explained/20566547) 어떤 도움이 – Nick

1

:

RewriteEngine On 

RewriteRule ^(folder/.*)$ http://www.site.invalid/$1 [R=301,NC,NE,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?q=$1 [L,QSA] 

일반적으로 기타 포괄 규칙 전에 301 개 규칙을 유지

그래서 htaccess로 파일과 같을 것입니다.

+0

그러나 나는 이것을했고 그것이 작동하지 않습니다. – bolvo

+0

어떤 URL이 당신에게 효과가 없었습니까? 이 브라우저를 다른 브라우저에서 사용해 볼 수 있습니까? 또한 .htaccess는'/ folder /'에도 존재합니까? – anubhava

+0

ok, 명확해야합니다. site1은 site2로 리디렉션되어야합니다. site1의 htaccess가 이제 RewriteRule의'code'RewriteEngine입니다.^(. *) $ site.invalid/folder/index.php? q = $ 1 [L]'코드' site2는'code'RewriteEngine을 가지고 있음 RewriteCond % {REQUEST_FILENAME }! -f RewriteCond % {REQUEST_FILENAME}! -d RewriteRule^(. +) $ index.php? q = $ 1 [L, QSA]'코드 ' 위의 코드를 추가해도 아무런 효과가 없습니다. – bolvo