Удаление расширения .php с определенного URL - PullRequest
1 голос
/ 25 июня 2019

Я пробовал поиск, но не могу найти решение, которое работает.

Я бы хотел удалить расширение .php и добавить косую черту из определенного URL (about.php).

Например ...

www.example.com/about.php следует перенаправить на www.example.com/about/

и

www.example.com/about следует перенаправить на www.example.com/about/

Я пробовал различные RewriteRule в .htaccess, но ни один из них не работал так, как мне было нужно.

Следующее добавляет косую черту, и я могу получить доступ к странице без расширения ... но версия .php по-прежнему отображается.

RewriteEngine On
RewriteBase /
RewriteRule ^about/$ about.php [END,QSA,NC]

Кто-нибудь знает, как заставить это работать?

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Для внешнего перенаправления /about.php/about - без косой черты) в /about/ (для поисковых систем и сторонних организаций, которые могли проиндексировать / связать старый URL), вам необходимо добавить что-то вроде следующего до вашего существующего переписывания:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^about(\.php)?$ /about/ [R=302,L]

Условие, которое проверяет переменную окружения REDIRECT_STATUS, состоит в том, чтобы гарантировать, что мы перенаправляем только прямые запросы, а не переписанные запросы с более поздним переписыванием. REDIRECT_STATUS пуст при первоначальном запросе и после первого перезаписи устанавливается в состояние HTTP (т. Е. "200" в случае успеха).

Шаблон RewriteRule соответствует обоим /about и /about.php и перенаправляет на /about/.

Обратите внимание, что это 302 (временное) перенаправление. Измените его на 301 (постоянный) - если это является намерением - как только вы подтвердите, что он работает нормально. Это сделано для того, чтобы избежать проблем с кэшированием (браузер постоянно кэширует 301). Аналогичным образом, если вы ранее экспериментировали с 301-м, вам необходимо убедиться, что браузер очищен перед тестированием.

ОБНОВЛЕНИЕ: Если бы я хотел сделать это на нескольких страницах

Если у вас всего две страницы (как в вашем примере / комментарии), то вы можете объединить оба правила в одно (вместо дублирования блока правил). Например:

RewriteEngine On
RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(about|contact)(\.php)?$ /$1/ [R=302,L]

RewriteRule ^(about|contact)/$ $1.php [END,QSA,NC]

Обратная ссылка $1 будет содержать «около» или «контакт» из группы захвата в шаблоне RewriteRule .

1 голос
/ 25 июня 2019

Вместо этого вы можете использовать index.php.Страница индекса не отображается по адресу браузера.

Вы можете создать http://www.example.com/about/index.php, а в браузере она будет отображаться как:

http://www.example.com/about/

Если вам нужно перенаправить с http://www.example.com/about.phpЯ могу рекомендовать использовать заголовок http-equiv:

< meta http-equiv="refresh" content="0; URL='http://www.example.com/about/'" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...