그래서 현재 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