Используя .htaccess, никогда не показывайте index.php - PullRequest
0 голосов
/ 28 ноября 2011

Как я могу никогда не показывать index.php?Например, все запросы к
site.com / index.php / controller перенаправляются в адресной строке браузера на
site.com / controller ?

Мой текущий .htaccess удаляет index.php, но когда пользователь непосредственно набирает site.com / index.php / controller , ему все равно показывается этот адрес в адресной строке, а не site.com / controller

RewriteCond %{REQUEST_FILENAME} !-f<br> RewriteCond %{REQUEST_FILENAME} !-d<br> RewriteRule ^(.*)$ index.php?/$1 [L]

ПРИМЕЧАНИЕ. Перед флеймом я проверил множество потоков .htaccess, которые решают проблему перенаправления index.php, но я не нашел ни одного, чтобы никогда не показыватьindex.php.Вот несколько ...
Не показывать index.php в подкаталоге
удалить index.php в codeigniter

Ответы [ 3 ]

0 голосов
/ 02 декабря 2012

Попробуйте:

RewriteEngine On
RewriteBase /

RewriteRule ^index.php(.*)% ^/$1 [QSA,R]

Я не проверял это, но, насколько я понимаю, он возьмет URL с index.php в качестве имени файла (независимо от того, что следует за ним) и перенаправит его на /(. *) (то есть все, что следовало за index.php в исходном запросе).Флаг QSA добавляет строку запроса, а R делает его сложным перенаправлением, а не просто переписывает URL в текущем запросе.

0 голосов
/ 18 июля 2015

Для тех, кто ищет более обобщенное решение:

Options +FollowSymLinks -MultiViews

#Disallow listing contents of subfolders
Options All -Indexes

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# If index or index.php requested, strip and redirect
RewriteCond %{THE_REQUEST} index(\\.php)?
RewriteRule ^index(\\.php)?$ http://yourdomain.com/ [R=301,L]

## Part 1
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## Part 2 - handle incoming that lacks extension (except for existing folders)
## To redirect /dir/foo to /dir/foo.php, (skip for admin or user dirs)
RewriteRule ^(admin|user)($|/) - [L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
0 голосов
/ 28 ноября 2011

Попробуйте добавить следующее в ваш файл .htaccess в корне вашего домена

RewriteEngine On
RewriteBase /

#if you get a request for this /index.php/controller
RewriteCond %{REQUEST_URI} ^/index.php/controller$
#redirect to  just controller
RewriteRule . controller     [R=301,L]

Если вам нужно, чтобы это работало для любой path_info, используйте вместо этого приведенное ниже правило

RewriteEngine On
RewriteBase /

#if you get a request for this /index.php(any-path)
RewriteCond %{REQUEST_URI} ^/index.php/(.+)$
#redirect to  any-path
RewriteRule . %1     [R=301,L]
...