2012-10-03 2 views
1

htaccess를 사용하여 단일 페이지 리디렉션을 설정하는 데 문제가 있습니다. 그런 다음Htaccess 단일 페이지 리디렉션 문제

RewriteCond %{SCRIPT_FILENAME} !-s 
RewriteRule (.*) index.php?path=$1 [QSA,L] 

리디렉션 예를 들어, 한 세트 : 현재 내가 가진 htaccess로 파일이

Redirect 301 /oldpage.htm http://www.mydomain.com/new-page 

하지만 난 데 문제는 내가 이전 URL의 브라우저 종류에 갈 때, 나는 부착 된 매개 변수, 예를 들면와 URL로 리디렉션이다 :

에 "http : // www가 .mydomain.com/new-page? path = oldpage.htm "

일부 리다이렉션의 경우 어쨌든 작동하는 것처럼 보이지만 일부는 404 오류가 발생합니다. 또한 RewriteCond와 Rewrite Rule을 사용하여 내가 할 수있는 페이지에 대한 모든 리디렉션을보다 일반적인 catch로 작성하려고 시도했으며, 동일한 문제가 있습니다.

다른 리디렉션이 리디렉션과 간섭해야한다고 생각합니다. 위의 규칙은 내가 볼 수있는 유일한 방법이지만 위와 같은 경우에는 URL 리디렉션을하지 말아야합니다. 올라가고있는

"http://www.mydomain.com/index.php?path=oldpage.htm"

사람이 매개 변수가 URL에 추가되고 왜 나는이 그렇게 일어나고 중지하는 방법을 설명 할 수 있습니다 내 리디렉션이 작동합니까?

건배!

답변

0

시도하기 때문에 이 둘은 URL 파일 매핑 처리 파이프 라인의 동일한 URI에 적용됩니다. 이런 일이 발생하지 않도록하려면이 경우에 하나 또는 다른 것을 고수해야합니다. 그건 정말 당신의 의도인지

RewriteRule ^/?oldpage.htm$ http://www.mydomain.com/new-page [L,R=301] 

RewriteCond %{SCRIPT_FILENAME} !-s 
RewriteRule (.*) index.php?path=$1 [QSA,L] 

귀하의 index.php 규칙은, 거의 모든 심볼릭 링크되어 CGI 스크립트가 아닌 모든 요청을 잡을 것, 그래서된다

은 또한 리디렉션이 먼저 적용 받고 싶지 . 그렇지 않으면 다음을 포함하여 합법적 인 요청을 처리 할 수 ​​있습니다.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

위의 규칙보다 위에.

+0

고맙습니다 @ 존 린 - 그게 효과가있는 것 같습니다. 나는 원래 사이트 작성자가 아니므로, 두 번째 다시 쓰기 규칙 (index.php? path = $ 1)이 수행되고 있어야하고 필요한 이유를 실제로 해결하지 못했습니다. –

+0

@SunChild 어떤 종류의 CMS 나 프레임 워크에 대해 "가상 요청"을 라우팅하는 것처럼 보입니다. 가상이라는 말은'http : // your.domain.com/some/path/page-name'과 같은 요청,'/ some /'또는'/ some/path' 폴더가 없으므로 URI'/some/path/page-name'는'index-php'로 라우팅되어'page-name'에 내용을 제공하는 방법을 알게됩니다. 'some/path'하지만 범주 일 수 있습니다. –

0

하여 재 작성 규칙에서 $ (1)

한다 RewriteRule (. *)의 index.php [QSA, L]를 mod_alias가합니다 (Redirect 지침) 및 mod_rewrite를합니다 (Rewrite* 지침)이 있기 때문이다이

+0

제안대로 규칙을 편집 해 보았거나 실제로 규칙을 완전히 삭제하려고 시도했지만 동일한 효과를 얻는 것처럼 보입니다. –

+0

내 로컬 호스트에서 원본 파일을 확인 했으므로 원하는대로 완벽하게 작동합니다. 어떤 경로? = 덧붙여서 –