Итак, меня попросили очистить 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