Убрать редирект с добавлением слеша в конце

M
На сайте с 04.08.2008
Offline
80
2910

Проблема такая.

Есть у меня статический сайт и структура его такая, что

/index.html
/somealias.html
/somealias/
/somealias/somefile.html
/otheralias.html
/otheralias/
/otheralias/otherfile1.html
...

Я не раз настраивал в .htaccess для того, чтобы убрать .html из файлов, но на этот раз не прокатывает: апач автоматически добавляет слеш к http://sampe.ru/somealias, делая редирект на http://sampe.ru/somealias/, где выскакивает индексная страница со списком файлов, либо закрытый доступ, если стоит запрет indexes off в .htaccess. То есть, если апач находит папку /somealias/, то автоматом пытается открыть папку вместо того, чтобы обратиться к /somealias.html с помощью правил mod_rewrite.

Были ли у кого такие же проблемы и как он решил? Отключение директивы DirectoryFlash в .htaccess, которая отвечает за это поведение апач почему-то не помогает (

Что посоветуете?

S
На сайте с 30.09.2016
Offline
469
#1
Muhandis:
выскакивает индексная страница со списком файлов, либо закрытый доступ, если стоит запрет indexes off в .htaccess.

Для начала я всё-таки создал бы файл index.html, чтобы чистая страница открывалась. И в .htaccess "Options -Indexes". А потом редирект на somealias.html - либо тупо в каждом index.html, либо в корневом .htaccess. Мне самому никогда это не надо было, но думаю, через регулярку несложно сделать.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
M
На сайте с 04.08.2008
Offline
80
#2
Sitealert:
Для начала я всё-таки создал бы файл index.html, чтобы чистая страница открывалась. И в .htaccess "Options -Indexes". А потом редирект на somealias.html - либо тупо в каждом index.html, либо в корневом .htaccess. Мне самому никогда это не надо было, но думаю, через регулярку несложно сделать.

Не, Вы меня неправильно поняли. Я могу запретить (и уже пробовал) автоиндексация файлов в папке, проблема в том, чтобы апач мне вообще не делал переадресацию на папку /somealias/ , если мне нужен только /somealias... Апач это делает автоматом и по идее DirectorySlash должна это отключать, но почему-то не срабатывает

S
На сайте с 30.09.2016
Offline
469
#3

Наверное, я действительно чего-то не понимаю:

Muhandis:
автоматически добавляет слеш к http://sampe.ru/somealias, делая редирект на http://sampe.ru/somealias/
Muhandis:
проблема в том, чтобы апач мне вообще не делал переадресацию на папку /somealias/ , если мне нужен только /somealias...

На мой взгляд, вполне естественно то, что если нет файла http://sampe.ru/somealias, но есть папка http://sampe.ru/somealias, апач пытается открыть именно эту папку. Зачем искать обходные пути, если существуют простые решения?

M
На сайте с 04.12.2013
Offline
223
#4

Muhandis, это из-за того что у вас mod_dir подключен. Этот модуль автоматом по дефолту делает редирект на адрес с трэйлинг-слэшем, если есть соотв. каталог. Но вы можете изменить это поведение при помощи след. директивы:

DirectorySlash Off


---------- Добавлено 08.10.2016 в 19:35 ----------

Muhandis:
Что посоветуете?
Если подходить серьезно, то посоветую натянуть ваш статик на какой-нибудь легкий движок.
Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
S
На сайте с 30.09.2016
Offline
469
#5
Muhandis:
Отключение директивы DirectoryFlash в .htaccess
miketomlin:
DirectorySlash Off

Так вот где собака порылась?!

M
На сайте с 04.12.2013
Offline
223
#6

Может, ТС и в файле .htaccess тоже сделал описку.

M
На сайте с 04.08.2008
Offline
80
#7

Спасибо всем за рекомендации.

Да, я и использовал DirectorySlash в .htaccess и не получалось к сожалению не из-за опечатки (опечатка была допущены только здесь в первом посте). Ситуацию усложняло то, что видимо что-то еще кешировало ?! редиректы и мои эксперименты не совсем были чистыми. Кажется clouflare что-то мутил дополнительно к моей проблемы. Сейчас попробую без CDN. Если получится отпишу здесь

---------- Добавлено 10.10.2016 в 23:49 ----------

Вообщем, сработал вот этот код в .htaccess!

DirectorySlash Off
RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ site.ru/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /$1.html

Интересно, что в примерах в интернете присутствовало еще одно условие, которое снова делало эти директивы неработоспособными, а именно RewriteCond %{REQUEST_FILENAME} !-d, то есть проверка на то, не является ли путь директорией на сервере. Видимо апач сообщал, что это директория даже без слеша, если одноименная папка все-таки существует. В итоге попробовав удалить это условие, а вместо него добавил RewriteCond %{REQUEST_URI} !(.*)/$ все стало работать. Еще раз всем спасибо, надеюсь приведенный код поможет кому-нибудь с аналогичной проблемой, только не забудьте заменить кусочек site.ru на свой!

R
На сайте с 20.02.2015
Offline
59
#8
Muhandis:
Интересно, что в примерах в интернете присутствовало еще одно условие, которое снова делало эти директивы неработоспособными, а именно RewriteCond %{REQUEST_FILENAME} !-d, то есть проверка на то, не является ли путь директорией на сервере.

Как раз таки наоборот это условие упрощает в вашем случаи.


DirectorySlash Off
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d # если это директория
RewriteRule ^([^/]+)$ /$1.html [L] # тогда открыть одноименный файл с директорией(без редиректа, он в принципе не к чему)

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