htaccess проблема с перенаправлением без www и косой чертой в конце

В настоящее время я перенаправляю весь трафик на www. версию моего сайта. Однако при проверке перенаправленных ссылок в определенной папке я заметил кое-что, что может или не может быть проблемой.

По сути, если я проверяю заголовок на www.example.com/example/examplepage/, он показывает 200 OK.

Если я отмечу www.example.com/example/examplepage (без завершающего /), он покажет 301 перенаправление на указанное выше, как и должно быть.

НО, если я проверю example.com/example/examplepage/ (без www), он перенаправит на www.example.com/example/examplepage.php ... который затем перенаправит на www.example.com/example/examplepage/ (правильная страница).

Я надеюсь это имеет смысл?

а) это нормально?
б) я что-то упустил в своем .htaccess?

  RewriteOptions inherit
RewriteEngine On

RewriteCond %{THE_REQUEST} ^.*/index.htm
RewriteRule ^(.*)index.htm$ http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]


RewriteCond %{THE_REQUEST} \.php
RewriteRule ^tips/([^.]+)\.php$ http://www.example.com/example/$1/ [R=301,L]

RewriteRule ^tips/([^.]+[^./])$ http://www.example.com/example/$1/ [R=301,L] 

RewriteRule ^(tips/[^.]+)/$ /$1.php [L] 

Обратите внимание: приведенное выше правило PHP было создано для «скрытия» расширений .php в определенной папке (не хочу, чтобы они были скрыты где-либо еще).


person Lee    schedule 01.05.2017    source источник
comment
Непонятно, почему www.example.com/example/examplepage должен перенаправлять (это означает, что все URL-адреса должны заканчиваться косой чертой)? Однако, согласно вашим директивам, только URL-пути, начинающиеся с /tips/, будут перенаправлять?   -  person MrWhite    schedule 01.05.2017
comment
да, верно - это перенаправление применяется только к папке /tips. Может быть, я должен был сделать это более ясным, ссылку на советы нужно было изменить на пример, чтобы соответствовать ссылкам на example.com - извините... надеюсь, что это имеет смысл.   -  person Lee    schedule 01.05.2017
comment
Я вижу, вы изменили свой пример следующим образом: если я проверю example.com/example/examplepage/ (без www), он перенаправит на www.example.com/example/examplepage.php ... - я не понимаю, как это произойдет с опубликованными вами директивами?   -  person MrWhite    schedule 01.05.2017
comment
Спасибо, что вернулись ко мне. IT в основном 301 перенаправляет дважды - один раз на /examplepage.php, а затем снова на правильную страницу. Это нормально? Я пытался получить все перенаправления на один URL-адрес, используя только одно перенаправление 301, но я просто не думаю, что это будет возможно. Благодарю вас за то, что вы ответили мне, поскольку мой оригинальный пост довольно сбивает с толку!   -  person Lee    schedule 01.05.2017
comment
Дважды перенаправить не обязательно проблема. Однако перенаправление на /examplepage.php нежелательно, поскольку вы хотите скрыть расширение .php. Но... как упоминалось выше, этого не должно происходить с директивами, которые вы разместили выше?! Первое перенаправление должно быть на www.example.com/example/examplepage/. Убедитесь, что кеш вашего браузера очищен, так как все ошибочные 301 будут кешированы браузером.   -  person MrWhite    schedule 01.05.2017
comment
Мне удалось с этим справиться (ну, ладно, мне повезло), но в любом случае теперь это работает. Я адаптировал приведенный выше порядок правил, чтобы показать следующее:   -  person Lee    schedule 02.05.2017


Ответы (1)


Мне удалось с этим справиться (ну ладно, мне повезло угадать), но в любом случае, теперь это работает. Я адаптировал приведенный выше порядок правил, чтобы показать следующее:

RewriteEngine On
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^tips/([^.]+)\.php$ http://www.example.com/tips/$1/ [R=301,L]
RewriteRule ^tips/([^.]+[^./])$ http://www.example.com/tips/$1/ [R=301,L] 
RewriteCond %{THE_REQUEST} ^.*/index.htm
RewriteRule ^(.*)index.htm$ http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteRule ^(tips/[^.]+)/$ /$1.php [L] 

Теперь это приводит к:

  1. http://example.com/tips/examplepage.php (и версия с www)
  2. http://example.com/tips/examplepage — без косой черты в конце (и версии с www)

Все, наконец, перенаправляются на www.example.com/tips/examplepage/ (с косой чертой в конце)

Это также гарантирует, что www.example.com/examplepage.php (не в папке «советы») сохранит свое расширение.

Он также перезаписывает index.htm в / (используя как www, так и не-www).

Я постарался добавить здесь как можно больше деталей в надежде, что это не даст кому-то другому тратить целые выходные на то, чтобы вырвать себе волосы, поседеть и т. д.

person Lee    schedule 01.05.2017