Перенаправить .html и косую черту в конце

У меня небольшая проблема с файлом .htaccess моего сайта. Я хочу, чтобы URL-адреса page.html и page/ перенаправляли на страницу без суффикса. Мне удалось отключить .html, но при вводе URL-адреса страницы я получаю внутреннюю ошибку сервера, что бы я ни пытался (Apache 2.4.18).

Вот полный код .htaccess (без попыток убрать косую черту)

Options +FollowSymLinks -Indexes -MultiViews

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^website\.com$ [NC]
RewriteRule ^(.*)$ http://www.website.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://www.website.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

Я хотел бы просто скопировать последние 6 строк, которые работали для .html, но вместо этого использовать косую черту, но я не уверен, как это сделать или есть ли лучшее решение. Любые советы высоко ценится!


person L. Thane    schedule 25.05.2016    source источник


Ответы (2)


Чтобы удалить косую черту в конце, сделайте следующее:

RewriteEngine on
RewriteRule (.+)/$ /example/$1 [L,R=301]

Чтобы удалить лишние косые черты:

RewriteCond %{THE_REQUEST} //
RewriteRule .* $0 [R]
person Joe    schedule 25.05.2016
comment
Спасибо, толстыйгуру, кажется, это работает! Раньше я пробовал тот же или похожий код под перенаправлением .html, но, помещая его выше, кажется, что все работает нормально. Большое спасибо! - person L. Thane; 25.05.2016
comment
Одна странность заключается в том, что когда я набираю mydomain.com/page/, он перенаправляется на mydomain.com//page, а затем, когда я снова ввожу mydomain.com/page/, он перенаправляется на mydomain.com/page и переключается между два слэша и один слэш каждый раз. Любая идея, если это поправимо? Ничего страшного, так как оба работают, но было бы неплохо держать его в чистоте. - person L. Thane; 25.05.2016
comment
Эй, @L.Thane, это странно... ты можешь попробовать добавить дополнительную косую черту в правило перезаписи, но я не уверен, что это сработает. Я отредактировал свой ответ правилом, которое должно избавиться от лишних косых черт. - person Joe; 25.05.2016
comment
Спасибо, новый RewriteCond может избавиться от двойной косой черты при обновлении, но, похоже, не может предотвратить ее появление в первую очередь, независимо от того, где она находится в коде. Игра с количеством косых черт в RewriteRule тоже не дала никакого эффекта, очень странно. - person L. Thane; 25.05.2016
comment
Вы можете попробовать использовать RewriteBase / Кроме этого, я не слишком уверен, я боюсь .. :/ - person Joe; 25.05.2016
comment
Странно, теперь все в порядке - я использую RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.+)/$ /$1 [L,R=301] Не знаю, почему это работает, так как я на 80% уверен, что проверял то же самое 5 минут назад, и оно не работало, но сейчас все хорошо. Спасибо за вашу помощь! - person L. Thane; 25.05.2016
comment
Безумный лол... Я рад, что теперь это работает! Рад, что смог помочь с первой частью! :) - person Joe; 25.05.2016

Вы пробовали что-то вроде

(\.html|\/)

Я сейчас не на своем Mac, но вы можете сделать это с помощью оператора or.

Проверьте это на https://regex101.com/ с несколькими URL-адресами.

person Tobias    schedule 25.05.2016
comment
Спасибо, Тобиас, я попытался заменить \.html\ этим, но, похоже, это привело к тому, что все URL-адреса перешли на внутреннюю ошибку сервера. Нужно ли это делать и в других местах? - person L. Thane; 25.05.2016