Вопрос настройки htaccess.

vic-99
На сайте с 11.09.2006
Offline
71
403

Подскажите, что нужно прописать в файле htaccess, чтобы страницы были доступны только со слешем в конце, а с «недоступного» варианта (без слеша) делался редирект с кодом 301 на страницу со слешем, а не на 404.

существующие страницы: www.site.ru/about/

несуществующая страница: www.site.ru/about

pragmatik
На сайте с 19.03.2013
Offline
102
#1
vic-99:
Подскажите, что нужно прописать в файле htaccess, чтобы страницы были доступны только со слешем в конце, а с «недоступного» варианта (без слеша) делался редирект с кодом 301 на страницу со слешем, а не на 404.

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1/ [R=301,L,QSA]
vic-99
На сайте с 11.09.2006
Offline
71
#2
pragmatik:
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)

RewriteRule .* %1/ [R=301,L,QSA]

По вашему коду получается при наборе www.site.ru/about попадает на страницу www.site.ru//index.php/?page=about . С таким адресом нет страницы на сайте, а отображается вроде нужная страница.

BG
На сайте с 03.10.2010
Offline
195
#3
vic-99:
По вашему коду получается при наборе www.site.ru/about попадает на страницу www.site.ru//index.php/?page=about . С таким адресом нет страницы на сайте, а отображается вроде нужная страница.

У вас там наверное еще правила прописаны какие-то, скиньте ваш файл .htaccess

-= Сайты на заказ | Правки, обновление, работы по DLE =- ( /ru/forum/791118 ) Telegram: @ruslansh ( tg://resolve?domain=ruslansh )
vic-99
На сайте с 11.09.2006
Offline
71
#4
BrightGuy:
У вас там наверное еще правила прописаны какие-то, скиньте ваш файл .htaccess

Помог вот этот блок:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !\..+$

RewriteCond %{REQUEST_URI} !/$

RewriteRule (.*) http://www.site.ru/$1/ [R=301,L]

Вот весь файл:

RewriteEngine On

RewriteRule ^([0-9a-z_]+)\/$ /index.php?page=$1

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

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

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

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !\..+$

RewriteCond %{REQUEST_URI} !/$

RewriteRule (.*) http://www.site.ru/$1/ [R=301,L]

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]

RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]

ErrorDocument 404 http://www.site.ru/404/

php_flag register_globals off

php_flag magic_quotes_gpc off

php_flag display_errors off

Вопрос, можно ли выделенные строки сократить в две или так нормально будут работать?

J
На сайте с 20.02.2014
Offline
120
jkm
#5

Варианты расширений файла php,htm,html описываются регулярным выражением (php|html?)


RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html?)\ HTTP/
RewriteRule ^ http://www.site.ru/ [R=301,L]
vic-99
На сайте с 11.09.2006
Offline
71
#6

Спасибо всем, вопрос закрыт, все получилось!

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