Добавить слэш, подскажите с htaccess

K
На сайте с 08.04.2010
Offline
90
949

Доброго времени.

Сейчас htaccess такой:


RewriteEngine On
RewriteBase /

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

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.(php|html)$ http://site.ru/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Нагуглил такое правило, чтобы к адресам добавлялся слэш, если его нет

RewriteCond %{REQUEST_URI} !(.*)/$

RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Но как его правильно вписать у меня?

Спасибо заранее.

dma84
На сайте с 21.04.2009
Offline
168
#1


RewriteEngine On
RewriteBase /

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

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.(php|html)$ http://site.ru/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
K
На сайте с 08.04.2010
Offline
90
#2

dma84, получается редирект на http://index.php/

---------- Добавлено 20.10.2017 в 01:16 ----------

Криво конечно, не должны же наверное условия повторяться, но заработало вот так:


RewriteEngine On
RewriteBase /

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.ru/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
dma84
На сайте с 21.04.2009
Offline
168
#3

В моём коде была ошибка, не обратил внимания, что вы используете подстановку имени хоста в рерайте (%1)


RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC,OR]
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)/?$ http://www.site.ru/$1/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.(php|html)$ http://site.ru/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Плюс такого подхода, что всё делается за один редирект, а не за два.

J
На сайте с 20.02.2014
Offline
97
jkm
#4

dma84, при составлении правил важно не забывать, что mod_rewrite запускает обработку запроса снова и снова, до тех пор, пока он не перестанет меняться.

Последнее правило изменит запрос на index.php и Apache запустит цикл обработки запроса заново с первого RewriteRule.

В итоге с любой страницы будет редирект на /index.php/.

Поможет дополнительная проверка RewriteCond %{ENV:REDIRECT_STATUS} ^$

или RewriteCond %{REQUEST_FILENAME} !-f

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий