point212
@point212
сисадмин linux, программист php

Убрать слэш / в конце URL

День добрый. Помогите разобраться с проблемой.

Apache 2.2.21

Есть URL вида: domain.tld/script < — именно так, без слэша в конце
И есть каталог /var/www/domain.tld/script/

При попытке зайти по этому URL, происходит редирект на domain.tld/script/
(обратите внимание на слэш в конце).

Погуглив немного, выяснил, что этим безобразием занимается mod_dir.
И что существует директива DirectorySlash off, которая отключает такое его поведение.

Но вот что-то она не срабатывает. Пробовал ее ставить и в VirtualHost, и в .htaccess — всё равно продолжает редиректить.

В попытках избавиться от этого эффекта попробовал изобрести подобный рерайт:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)/$ domain.tld/$1 [L]


Но он не дает никакого эффекта. Вернее вызывает зацикливание рерайта.

Подозреваю что я натолкнулся на какой-то bug Апача, либо конкретно модуля mod_dir.
И всё же… что делать?
  • Вопрос задан
  • 16031 просмотр
Пригласить эксперта
Ответы на вопрос 7
Majak
@Majak
Вдруг кому-то и сгодится.
У меня, для своих нужд, получилось следующим образом:

DirectorySlash Off

RewriteEngine on
RewriteBase /

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

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ $1/index.php [L]

Это для директорий, которые ни как не хотели слушаться.

Для просто url-ов, можно добавить, ещё одну строчку:

RewriteRule ^(.*)/$ $1 [L,R=301]
Ответ написан
Nastradamus
@Nastradamus
Я помню у знакомого была такая проблема, он меня просил починить.
Я ковырял-ковырял, но ничего не чинилось. Потом открыл вместо FF в Хроме этот сайт — а там все работает как надо. Сделал «забыть сайт» в Фаерфоксе — заработало. FF часто кэширует какую-нибудь ненужную фигню и упорно ее отображает, не смотря на CTRL+F5.
Ответ написан
это не поможет?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
RewriteRule ^(.*)$ /$1/ [R=301,L]
Ответ написан
Evengard
@Evengard
<Location /script>
DirectorySlash Off
SetHandler script-handler


Вот так, с SetHandler-ом, пробывали?
Ответ написан
maxgalkin
@maxgalkin
Скажите, а почему вы считаете, что это проблема и надо исправлять?
Ответ написан
@scroll_down
Воскрешаю тему!
point212 , удалось решить проблему?
Ответ написан
@AndryG
Наткнулся в доках на косых чертей. Может это вам надо?

DirectoryCheckHandler Directive
Перенаправление «трейлинг-косой черты» выдается, когда сервер получает запрос на URL-адрес servername/foo/dirname где dirname - это каталог. Каталоги требуют mod_dir косой черты, поэтому mod_dir выдает перенаправление на servername/foo/dirname .


ru https://code.i-harness.com/ru/docs/apache_http_ser...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы