2013-04-24 5 views
2

나는 apache mod_rewrite을 사용하며 지난 6 개월 동안 아무런 오류없이 작동하는 사이트가 있습니다.아파치 mod_rewrite가 표현식을 매개 변수로 매핑하지 않습니다.

난 다음 다시 쓰기 규칙이 있습니다 여기에

RewriteRule ^products/([a-z\-]+)/$ /products.php?category=$1 [NC,L] 

products.php

$category = $_GET['category']; 

if (isset($category)) { 
    // do some processing here 
} 
else { 
    header("Location: /500.html"); 
    exit; 
} 

이 규칙을 명중 링크의 예는

사람을합니까 /products/lighting-poles/

내 페이지에 코드를 실제 다시 쓰기가 여전히 발생하지만 ([a-z\-]+)category=$1에 매핑하지 않는 이유를 확인하십시오.

내가 호스트의 .htaccess 파일에 Options +FollowSymLinks 그래서 내가 먼저 시도 라인을 주석 처리 한 것으로 나타났습니다

추가 정보를 원하시면 사이트가 아파치 흰색 화면을 500 오류를 반환하려면이 만 다시 할 수 있습니다. htaccess로 파일

<IfModule mod_rewrite.c> 
#Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

# Add a trailing slash to paths without an extension 
RewriteCond %{REQUEST_METHOD} !POST 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 

# other rules including problem rule here 

</IfModule> 
+0

당신이 재 작성 무엇을 의미합니까이 발생? products.php 스크립트는 여전히 호출됩니까? –

+0

예, 400 오류가 없으며 스크립트는 여전히 products.php에서 종료됩니다. – samazi

+0

문자 클래스에서 하이픈을 이스케이프 할 필요가 없습니다. 예를 들어'[a-z-]' – Phil

답변

3

에서

더이 병적으로 MultiViews를 문제처럼 들린다. Multiviews는 켜져 있으면 URL에 매핑되는 파일을 찾기 위해 URL 파일 매핑 파이프 라인에서 몇 가지 다른 추가 작업을 시도하는 콘텐츠 협상입니다. 여기에 /products/blah과 같은 URL이 있지만 products.php이라는 파일이 있으므로 다중보기에서 products/products.php/blah으로 매핑하려고 할 수 있습니다. 따라서 다시 쓰기 규칙을 완전히 무시하면 category 매개 변수가 표시되지 않습니다.

옵션이며, 추가 시도 :

Options -Multiviews 
+0

에서 더 많은 내용을 포함하도록 질문을 업데이트했습니다.이 옵션을'.htaccess'에 추가하려고 했으므로 사이트가 기본 아파치'500 오류 '페이지를 표시하게 만들었습니다. VirtualHost'는 재정의 옵션을 허용하지 않습니다? 다른 주에서 호스트는 지난 주에 서버에 보안 패치를 적용했습니다. – samazi

+0

방금 ​​ISP의 지원이 오늘 집으로 돌아 갔으므로'Multiview' 옵션을 사용하기 위해'apache'의 로컬 버전을 수정했습니다. 이제 오류를 재현 할 수있게되었습니다! 나는 당신이 옳고 자신의 소중한 지식을 나눌 수있어서 고맙다고 확신합니다. – samazi

관련 문제