2012-03-05 2 views
0

나는 PHP 웹 사이트를 가지고 있으며 mod_rewrite을 사용하여 모든 URL 요청을 리디렉션합니다.mod_rewrite를 사용하여 실제 URL 숨기기

RewriteRule ^product/([0-9]+).*/?$ product.php?pid=$1 [L,NC] 
RewriteRule ^category/([0-9]+).*/?$ category.php?cid=$1 [L,NC] 

지금까지,이 위대한 작품을 때 사용자 유형 : http://www.mysite.com/product/1http:/www.mysite.com/product.php?pid=1의 실제 URL과 페이지가 그에게 표시됩니다 나는 product.php 스크립트를 가지고 있고 나는 그것을위한 규칙이 가정하자.

그러나 사용자에게 내가 제공 한 규칙만으로 내 사이트에 액세스하도록하고 싶습니다. 즉, 사용자가 http:/www.mysite.com/something을 입력하거나 http:/www.mysite.com/product.php?pid=1과 같은 올바른 URL을 입력하면 404 오류 페이지로 리디렉션되어야합니다. 이 스크립트는 맞춤 스크립트 또는 아파치의 기본 404 페이지 일 수 있습니다.

그럴 수 있습니까?

편집 : 요청, 나는 내 전체 htaccess로 파일 게시 :

Options +FollowSymLinks 
Options +Indexes 

RewriteEngine on  
RewriteBase /websitename 
RewriteRule ^product/([0-9]+).*/?$ product.php?pid=$1 [L,NC] 
RewriteRule ^category/([0-9]+).*/?$ category.php?cid=$1 [L,NC] 

답변

1

당신은 단지 모든 가능한 마지막 재 작성으로 캐치를 추가하고 404.php에 매핑 할 수 있습니다를 (또는 당신이 wan't 어떤).

RewriteRule ^(.*)$ 404.php?attempt=$1 [L,NC] 

이 내용을 다시 쓰기의 맨 아래에 넣으십시오.

편집 :

내가 자신이 밖으로 테스트 (나는 보통 재 작성이 방법을 사용하지 않음) : 또한

RewriteEngine on  

RewriteRule ^product/([0-9]+).*/?$ product.php?pid=$1 [L] 
RewriteRule ^category/([0-9]+).*/?$ category.php?cid=$1 [L] 

RewriteRule ^(.*)$ 404.php?attempt=$1 [L] 

그리고는 404 매번 타격을받을 것이라는 점을 발견했다. 분명히 이것은 .htaccess의 예상되는 동작입니다. (https://stackoverflow.com/a/3642271/603184)

그래서 당신이 제품/category.php을 칠 때 일치하는 중지 할 필요 밝혀,이 추가를 통해 수행 할 수 있습니다 : 404 리디렉션하기 전에

RewriteRule ^category.php$ - [L] 
RewriteRule ^product.php$ - [L] 

. 그 결과 :

RewriteEngine on  

RewriteRule ^product/([0-9]+).*/?$ product.php?pid=$1 [L] 
RewriteRule ^category/([0-9]+).*/?$ category.php?cid=$1 [L] 

RewriteRule ^category.php$ - [L] 
RewriteRule ^product.php$ - [L] 

RewriteRule ^(.*)$ 404.php?attempt=$1 [L] 
+0

이전에 시도했습니다. 모든 규칙에 대해 L 플래그가 있더라도 모든 URL을이 페이지로 리디렉션합니다. –

+0

이상하게 들리면 대개 완벽하게 작동합니다. RewriteRules의 전체 세트를 보여줄 수 있습니까? –

+0

내 대답을 편집했습니다. –

관련 문제