2016-05-25 1 views
1

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

Вот полный код .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, но есть вместо этого он действует на конечную косую черту, но я не уверен, как это сделать или если есть лучшее решение. Любые советы высоко ценится!

ответ

1

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

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

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

RewriteCond %{THE_REQUEST} // 
RewriteRule .* $0 [R] 
+0

спасибо толстыйguru, это похоже на работу! Раньше я пробовал тот же или похожий код под перенаправлением .html, но, поставив его выше, похоже, все работает нормально. Очень ценим! –

+0

Одна странная вещь: когда я набираю mydomain.com/page/, он перенаправляется на mydomain.com//page, а затем, когда я вхожу в mydomain.com/page/, он перенаправляется на mydomain.com/page и переключается между две косые черты и одна косая черта каждый раз. Любая идея, если это возможно? Не так много, поскольку оба работают, но было бы неплохо сохранить его в чистоте. –

+0

Эй @ Л.Тане, это странно ... вы могли бы попробовать добавить дополнительную косую черту в rewriterule, но я не уверен, что это сработает. Я отредактировал свой ответ с правилом, которое должно избавиться от лишних косых черт. – Lag

0

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

(\.html|\/) 

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

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

+0

Благодаря Tobias, я попытался заменяя \ .html \ с, но это, казалось, вызывают все URL-адреса, чтобы перейти на внутреннюю ошибку сервера. Нужно ли ехать и в других местах? –