У меня есть index.php-контроллер, к которому перенаправляются все URL-адреса, к которым не привязаны существующие файлы. Правила .htaccess я в настоящее время выглядит следующим образом:Удаление index.php из URLS с .htaccess
RewriteEngine On
DirectorySlash Off
# Remove Trailing Slashes
RedirectMatch 302 ^(.*)/$ $1
# Remove WWW
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule^http://%1%{REQUEST_URI} [R=302]
# Reroute to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
То, что я хочу сделать, это использовать 301 редирект, если index.php включен в URL. НО! Я не могу использовать RewriteBase или запросы, которые начинаются с косой черты, потому что webapp, который я разрабатываю, может быть в подпапке. Поэтому в основном, я хочу только переписать для текущего каталога:
example.com/foo/index.php/bar/whatever необходимо перенаправить на example.com/foo/bar/whatever example.com/foo/index/bar/any также следует перенаправить на example.com/foo/bar/whatever
localhost/place/foo/index.php/bar/все, что нужно перенаправить на localhost/place/foo/bar/whatever localhost/place/foo/index/bar/что угодно также следует перенаправить на localhost/place/foo/bar/whatever
Как это сделать с помощью .htaccess?
ОБНОВЛЕНО КОД: Все здесь работает КРОМЕ: index.php не удаляется из любого места в URL.
Вот код:
<IfModule mod_rewrite.c>
RewriteEngine On
DirectorySlash Off
# Remove WWW
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule^http://%1%{REQUEST_URI} [R=302,L]
# Remove Trailing Slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule^%1 [R=302,L]
# Reroute to index.php
#RewriteCond $1 !^(index\.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?cURL=/$1 [L,QSA]
</IfModule>
С example.com/index.php/ foo/Я получаю example.com//foo/ и с example.com/foo/index.php/foo/bar/ Я получаю example.com//foo/bar/ И без завершающего косая черта (который URL-адреса I роды ting не имеют) Я получаю цикл переадресации. – Michelle
См. Обновление сейчас, для 'http: // localhost/foo/index.php/foo/bar' Я получаю' http: // localhost/foo/foo/bar' – anubhava
Убедитесь, что это правило является вашим первым правилом. – anubhava