2013-08-17 5 views
0

.htaccess에 문제가 있습니다. 이 코드는 다음과 같습니다.RewriteRule 및 .htaccess에 문제가 있습니다.

RewriteEngine On 
Options -MultiViews 
Options +FollowSymlinks 

#Remove .php extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

#Profile 
RewriteRule ^profile/([a-zA-Z0-9_-]+)-([0-9]+)/([a-zA-Z0-9_-]+)$ profile.php?one=$1&two=$2&three=$3 

.php 확장자를 제거하고 /profile.php를 사용하여 친숙한 URL을 만들고 싶습니다. http://website.com/profile/1/2/3, 에 액세스하려고하면 문제가 발생합니다. 오류는입니다. 하지만 PHP 확장을 제거하는 코드를 제거하면 이 잘 작동하지만이지만 물론 .php 확장이 표시됩니다.

그럼 ...이 코드에서 잘못된 점은 무엇입니까? 나는 몇 번이고 점검했다. 그리고 나는 정말로 어떤 결함이라도 발견하지 않는다. .. 고마워.

+0

규칙의 순서가 중요합니다. – mario

답변

1

문제는 L 플래그 (마킹 마지막 규칙)를 사용하지 않는 것 같아요.

이 당신의 코드를 바꿉니다 : 당신이 원하지 않는 경우`[L]을`그들이 방해하는과 재 작성 프로세스를 중지 될 때

RewriteEngine On 
Options +FollowSymlinks -MultiViews 

#Profile 
RewriteRule ^profile/([\w-]+)/([\w-]+)/([\w-]+)/?$ profile.php?one=$1&two=$2&three=$3 [L,QSA] 

#Remove .php extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 
+0

+1 주문이 여기에서 방해가 될 수 있습니다. 그리고 OP는 URL을'/ profile/1/2/3'로하려고 시도하지만 그의 규칙은'/ profile/\ d- \ d/\ d' (정확하지 않지만'-'에주의)를 기대합니다. –

+0

@RaviThapliyal : 감사합니다. 아주 좋은 지적입니다. OP는 정규 표현식과 URL의 차이점에 유의하십시오. 귀하의 예제 URL을 지원하기 위해 내 대답을 편집하고 있습니다. – anubhava