2012-02-10 2 views
0
내가 예에서 리디렉션 할

,Apache에서 특정 경로와 쿼리 문자열에서 어떻게 리디렉션합니까?

http://mystore.com/category.php?id=123

에서도

http://mystore.com/categories/foo

하고,

에, 예를 들어,

http://mystore.com/product.php?id=456

http://mystore.com/products/bar

영구적 인 (301) 리디렉션이며 약 12 ​​개가됩니다. 경로 또는 쿼리 문자열에서 정보를 추출 할 필요가 없습니다. 정확히 일치시킬 필요가 있습니다. 그리고 가능하다면 절대 URL을 지정하는 것을 피하고 싶습니다.

나는이 mod_rewriteRewriteCond들과 RewriteRule의 어떤 조합으로 수행 할 수 있습니다,하지만 난 이미 다시 작성 일부 URL을하고있어 내 시도가 지금까지 원하지 않는 결과가 있었다 파악.

RewriteBase/

RewriteRule sitemap.xml index.php?route=sitemap [L] 

# skip files and directories 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^([^?]*) index.php?route=$1 [L,QSA] 

의도 한대로이 작동 :

여기 전에 내 .htaccess 파일 에서 익명으로 발췌 수정합니다. 가장 최근에 여러 줄의 조건과 규칙을 추가하려고 시도했습니다. 가장 최근에

RewriteCond %{QUERY_STRING} id=123 
RewriteRule category.php categories/foo [L,R=301] 

마지막 규칙에 관한 문제로 인해 문제가 발생합니다. 홈 페이지는로드되지만 스타일 시트, 이미지 및 기타 리소스는로드되지 않습니다.

이 시점에서 나는 리디렉션을 처리하기 위해 category.phpproduct.php이라는 PHP 스크립트를 작성하는 것을 고려하고 있습니다 .... 솔루션에서 몇 자 정도 떨어져 있습니까?

답변

0

나는 문제를 파악하지 못했지만 지시어 순서 만 변경하여 해결했습니다. 새로운 리디렉션을 RewriteBase 지시문 바로 다음으로 옮겼습니다. 모든 것이 완벽하게 작동합니다.

0

유효하지 않게 된 상대 경로가있을 수 있으므로 리소스 (스타일 시트, 이미지 등)가로드되지 않습니다.

브라우저의 "범주"는 폴더로 간주되므로 리소스 경로가 유효하지 않습니다.

빠른 수정 (도메인/하위 도메인에서 실행 중이며 폴더가 아닌 경우)은 모든 리소스의 경로에 넣는 것입니다.

예 : 카테고리 페이지에있을 때 style.css를 /style.css로 변경하면 여전히 포함됩니다.

+0

나는 그렇게 단순하지 않다고 생각합니다. 1) 기본 요소를 사용하고 2) 누락 된 리소스의 URL을 브라우저의 주소 표시 줄에 입력하면 404 (Apache가 아닌 PHP 프레임 워크에서 생성 된 404)가 표시됩니다. – Metaphile

+0

다시 쓰기 규칙은 파일이 존재하지 않는 경우에만 작동합니다.따라서 PHP 프레임 워크는 파일이 존재하지 않는 경우에만 404를 생성합니다. 이는 URL이 유효한 파일이 아님을 의미합니다. 대신 절대 URL을 넣고 새로운 테스트를하십시오. –

+0

무슨 뜻인지 잘 모르겠습니다. 'RewriteBase' 지시어는 기본 URL을 지정합니다. 예제에서는'/'입니다. 내 URL에'/'접두사를 붙일 수는 있지만 아무 효과가 없어야합니다. (나는 실제로 당신을 위해 그것을 시도했다. :-)) 어쨌든, URL http://mystore.com/path/to/actual/file이 나의 최신 추가 전에 정확하게 해결 되었다면, 왜 지금 그렇지 않아야 하는가? – Metaphile

관련 문제