htaccess добавить слеш к URL

12
Станислав
На сайте с 27.12.2009
Offline
258
2700

Нужно добавить слеш к URL если переходят в каталог без слеша

Делаю так

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

# Main URL rewriting.
RewriteRule ^(.*)$ index.php?$1 [L,QSA]

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !.html$
RewriteRule (.+) $1/ [R=301,L]
</IfModule>

Конфликтует с

RewriteRule ^(.*)$ index.php?$1 [L,QSA]

Но данная строка тоже необходима. Как побороть?

Без

RewriteRule ^(.*)$ index.php?$1 [L,QSA]

Слеш добавляется, но 404 отдают страницы, так как стоит фреймворк CI

Разобрался, точнее нашел готовый код

Мы там, где рады нас видеть.
siv1987
На сайте с 02.04.2009
Offline
427
#1

RewriteRule ^([^.]+)(?<!/)$ /$1/ [R=301,L]

или

RewriteCond %{REQUEST_URI} !/$

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

Станислав
На сайте с 27.12.2009
Offline
258
#2

сделал так

# Добавляем слеш в конце URL

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_URI} !(.*).html$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
</IfModule>

# Для работы Codeineger
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|user_dok|css\.xml|robots\.txt)
RewriteCond %{REQUEST_URI} !\.(css¦js¦jpg¦gif¦png)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
</IfModule>

Может кому и пригодится!

G-and-Y
На сайте с 29.06.2013
Offline
185
#3

ув. Siv1987 подскажите как сделать чпу?

сейчас

/book.php?name=sreda&autor=galina

Надо

/book/sreda-galina.html

Сейчас

/autor.php?autor=galina

Надо

/autor/galina.html

Абузо-устойчивые впс ( http://vps-hosting.lv/?p=13408 )
siv1987
На сайте с 02.04.2009
Offline
427
#4

RewriteEngine On

RewriteRule ^book/(.+?)-(.+?)\.html$ book.php?name=$1&autor=$2 [L]

RewriteRule ^autor/(.+?)\.html$ autor.php?autor=$1 [L]

G-and-Y
На сайте с 29.06.2013
Offline
185
#5

Не получается, мб что то надо добавлять в index.php

Как я уже только не побывал, хз в чем беда.

Все ссылки с сайта

janr.php?janr=
book.php?name=s_pervogo_vzglyada&autor=
autor.php?autor=nikolas_sparks
asearch.php?series=
book_exchanger.php?book=
series.php?series=
siv1987
На сайте с 02.04.2009
Offline
427
#6

janr и series и другими вы немного ошиблись, так как для них правила реврайта здесь нету. autor по крайней мере должен работать.

Зачем нам эти ссылки? Надеюсь понимаете что это реврайты а значит и проверять нужно чпу ссылками.

G-and-Y
На сайте с 29.06.2013
Offline
185
#7

janr и series написал просто какие еще есть и нужно ли их реврайтить.

Надеюсь понимаете что это реврайты а значит и проверять нужно чпу ссылками.

Не понял?

п.с. на впс все включено, спрашивал у техподдержки.

G-and-Y
На сайте с 29.06.2013
Offline
185
#8

спс siv1987 сработало, блин проверял без /book/

А как прописать что б был 301 редирект

с autor.php?autor=

на

autor/

siv1987
На сайте с 02.04.2009
Offline
427
#9

Добавить после RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteCond %{QUERY_STRING} ^autor=([^&]+)

RewriteRule ^autor.php /autor/$1.html [R=301,L]

G-and-Y
На сайте с 29.06.2013
Offline
185
#10

Ваш вариант выдает

/autor/.html?autor=galina_khovanova

не работает :(

Нашел такой вариант

RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} autor=([^&]+)$
RewriteRule ^autor.php$ /%1.html? [L,R=301,L]
RewriteRule ^(.+?)\.html$ autor.php?autor=$1 [L]

работает но не пойму как его применить к этой строке

RewriteRule ^(.+?)-(.+?)\.html$ book.php?name=$1&autor=$2 [L]

12

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