Возникли проблемы с непоследовательным применением правил mod_rewrite

Возникли проблемы с непоследовательным применением правил mod_rewrite

Итак, меня попросили очистить URL-адреса для веб-приложения, которое мы в настоящее время запускаем на Apache (версия 2.4.9, если интересно), но после нескольких часов возни с командами 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

Связанный контент