mod_rewrite 규칙을 일관되지 않게 적용하는 데 문제가 있습니다.

mod_rewrite 규칙을 일관되지 않게 적용하는 데 문제가 있습니다.

그래서 현재 Apache에서 실행 중인 웹 앱(관심이 있는 경우 버전 2.4.9)의 URL을 정리하라는 요청을 받았지만 몇 시간 동안 mod re_write 명령을 사용하고 난 후에 나는 원을 그리며 뛰어다닌다. 제가 하려는 일은 다음과 같습니다.

URL이 다음과 같은 경우(http://www.foo.bar/admin/index.php), 다음과 같이 표시되도록 합니다.http://www.foo.bar/admin

URL이 다음과 같은 경우(http://www.foo.bar/admin/testpage.php), 다음과 같이 표시되도록 합니다.http://www.foo.bar/admin/testpage

URL이 다음과 같은 경우(http://www.foo.bar/admin/testpage.php?id=15&foo=www), 다음과 같이 표시되도록 합니다.http://www.foo.bar/admin/testpage?id=15&foo=www

지금까지 index.php가 해결하는 위치에 도달했습니다....주로.....그리고 두 번째 예에서는...때때로 해결됩니다. 기본적으로 내가 가지고 있는 코드는 매우 불안정해 보이며 파일 트리에서 두 수준 아래로만 분해됩니다. 그래서 여기 누군가가 이 문제에 대해 나를 도와줄 수 있는지 궁금합니다. vhost 파일에 있는 내용은 다음과 같습니다(모든 디렉토리에 .htaccess 파일로 저장하고 싶지 않았기 때문에).

AllowOverride None
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

답변1

다음과 같이 작동해야 합니다.

RewriteRule ([^/]+)/(.*)/?index.php$ $1
RewriteRule \.php $1

편집: 첫 번째 규칙은 더 간단한 다음 규칙으로 대체될 수 있습니다.

RewriteRule (.*)/index\.php?$ $1

예:

URL =http://www.foo.bar/admin/index.php

일치하는 규칙 =RewriteRule ([^/]+)/(.*)/?index.php$ $1

결과 :http://www.foo.bar/admin


URL =http://www.foo.bar/admin/testpage.php

일치하는 규칙 =RewriteRule \.php $1

결과 =http://www.foo.bar/admin/testpage


URL =http://www.foo.bar/admin/testpage.php?id=15&foo=www

일치하는 규칙 =RewriteRule \.php $1

결과 =http://www.foo.bar/admin/testpage?id=15&foo=www

관련 정보