Как добавить отсутствующий завершающий слэш в конце URL через .htaccess?

Дата: 16 ноября /

Решение этой тонкой проблемы — это позволить серверу добавлять завершающий слэш автоматически. Чтобы сделать это правильно, мы должны использовать внешний редирект, для того чтобы браузер правильно запрашивал картинки и пр. В случае если бы мы сделали только внутренний редирект, это бы работало только для самой страницы каталога (страницы по-умолчанию), однако были бы проблемы при наличии любых картинок на этой странице с относительными URL, потому что браузер сделал бы запрос на вставку in-lined объекта. Например, запрос для image.gif на странице /~quux/foo/index.html без внешнего редиректа выглядел бы как /~quux/image.gif!

Поэтому, для того чтобы сделать это трюк, мы пишем:

RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo$  foo/  [R]

Сумашедший и ленивый может даже сделать следующее в файле .htaccess находящемся в корне веб-пространства своего сайта. Однако, следует отметить, что это создает некоторые накладные расходы.

RewriteEngine  on
RewriteBase    /~quux/
RewriteCond    %{REQUEST_FILENAME}  -d
RewriteRule    ^(.+[^/])$           $1/ [R]

Подробнее здесь http://www.egoroff.spb.ru/portfolio/apache/rewriteguide.html

Вариант

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

Статьи по теме:

No related posts.

Метки: , ,

Рубрика: Web-разработка

Comments Один комментарий

 

  1. Анастасия Трабула:

    Здравствуйте!

    Хочу спросить вашего совета по поводу настройки .htaccess.

    Удалось сделать только лишь постоянную переадресацию с адреса без WWW на адрес с WWW и страницы с ошибками.
    ————————————————-
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
    RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
    ErrorDocument 400 /error/400.html
    ErrorDocument 401 /error/401.html
    ErrorDocument 403 /error/403.html
    ErrorDocument 404 /error/404.html
    ErrorDocument 500 /error/500.html
    ————————————————-
    Подскажите, пожалуйста, как сделать аналогично вашим УРЛам. Чтобы убиралось .php и добавлялся слэш в конце. Например, http://www.site.ru/catalog/info/.

    Получается сделать только что-то одно. Убрать расширение или добавить слэш.

    Заранее спасибо, надеюсь, что получу ответ.

    С наступающим Новым годом!

    Анастасия

Оставить комментарий