2012-09-28 2 views
0

PHP를 사용하여 웹 사이트를 개발하고 있습니다.
그리고 PHP의 매개 변수로 URL의 첫 번째 디렉토리 이름을 사용하고 싶습니다.디렉토리에 액세스 할 때 mod_rewrite가 작동하지 않습니다.

RewriteRule ^([a-z][a-z])/(.*)$ xyz/$2?first-dir=$1 [L] 

내가 http://example.com/aa/b/에 액세스
/xyz/b/index.php이 매개 변수 first-dir=aa으로 실행됩니다

나는 다음 다시 쓰기 규칙을 가지고있다.
브라우저의 주소 표시 줄에있는 URL은 http://example.com/aa/b/ (입력 URL과 동일)입니다.

하지만 (/을 미행하지 않고) http://example.com/aa/b에 액세스 할 때, 주소 표시 줄에
URL은 http://example.com/xyz/b/?first-dir=aa을하게된다.
이 URL을 사용자에게 표시하고 싶지 않습니다.

왜 이런 일이 발생합니까?
이 문제를 해결하는 방법?

답변

1

이 mod_dir이하고 DirectorySlash 당신의 URI를 방해합니다. 아파치가 당신의 URI가 디렉토리를 가리키고 있지만 슬래쉬가 빠져 있다면, 클라이언트는 슬래시가있는 동일한 URI로 클라이언트를 리디렉션합니다. 규칙이 적용되고 mod_dir은 /aa/b을 디렉토리로 간주하여 브라우저를 /aa/b/으로 리디렉션합니다. 당신은 귀하의 rul에서 후행 슬래시를 확인해야합니다 :

RewriteRule ^([a-z][a-z])/(.*?)/?$ xyz/$2/?first-dir=$1 [L] 
+0

감사! 나는'DirectorySlash'에 대해 매우 기쁩니다. RewriteRule이 작동합니다. 그러나'/ aa/any.php'를'xyz/any.php? first-dir = aa'로 다시 쓰고 싶었습니다. 다음 코드는 가능한 그렇게합니다 ''부터 DirectorySlash Off' 한다 RewriteCond % {REQUEST_FILENAME} /index\.php -f' 'RewriteRule의 (^. *) $ $ 1/index.php에 [L] ' 'RewriteRule^([az] [az]) (/.*$ | $) xyz $ 2? first-dir = $ 1 [L]' –

0

/index.php와 URL이

수정 된 버그를 실행 할 경우 : RewriteRule ^([a-z][a-z])/(.*)$ xyz/$2/index.php?first-dir=$1 [L]

관련 문제