#regex #apache #.htaccess #mod-rewrite
#регулярное выражение #apache #.htaccess #мод-перезапись
Вопрос:
Я могу открыть свой сайт следующим образом:
www.mysite.com
или вот так:
www.mysite.com/index.php
Я хочу создать правило htaccess, которое перенаправляет www.mysite.com/index.php чтобы www.mysite.com . Но все мои попытки имеют другие побочные эффекты. Я пробовал:
Redirect index.php home.php
RewriteRule ^index.php?$ home.php [NC,L]
RewriteRule ^index.php/?$ redirect_to_home.php [NC,L]
Но все это портит оригинал index.php позвони. Итак, он перенаправляет, но затем обычный mysite.com ссылка больше не работает.
Есть идеи?
Ответ №1:
Не могли бы вы попробовать следовать.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} index.php
RewriteCond %{REQUEST_URI} ^(.*/)index.php$
RewriteRule ^ %1 [R=301,L]
Объяснение:
- Создание
RewriteEngine On
, чтобы заставить правила работать. - Упоминание условия, по
RewriteCond
REQUEST_FILENAME
которому проверяется, присутствует ли указанный файл в браузере. - Затем проверка, содержит ли
THE_REQUEST
which полную информацию о запросе (включая URL и метод GET / POST), если он имеет index.php в нем. - Теперь проверяем, есть ли
REQUEST_URI
index.php
в запрошенном URL-адресе, где все сохраняется перед ним во временной буферной памяти, чтобы позже восстановить его значение (в основном, его доменное имя). - Наконец,
RewriteRule
для перенаправления полного URL с index.php использовать доменное имя только в соответствии с требованиями (R = 301 для постоянного перенаправления на стороне браузера).
Ответ №2:
Используйте это правило перенаправления для удаления /index.php
с любого пути:
RewriteEngine On
RewriteCond %{THE_REQUEST} /index.php [NC]
RewriteCond %{REQUEST_URI} ^(.*/)index.php$ [NC]
RewriteRule ^ %1 [L,R=301,NE]