Что прописать в htaccess, чтоб при запросе папки к пути не добавлялся слэш?

Neptoon
На сайте с 12.07.2011
Offline
126
1301

de - папка

Нужно, чтобы вместо site.com/de/ было site.com/de

И таких папок несколько

Сейчас такой htaccess

RewriteEngine On
RewriteBase /


# redirect www
RewriteCond %{HTTP_HOST} ^www\.site\.com
RewriteRule ^(.*) http://site.com/$1 [R=permanent,L,QSA]


# redirect http to https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}


# remove index.php and index
RewriteCond %{THE_REQUEST} (?:/[^/]*)*/index\.php[?#\ ]
RewriteRule .* %{REQUEST_URI}/../ [L,R=301]
RewriteCond %{THE_REQUEST} (?:/[^/]*)*/index[?#\ ]
RewriteRule .* %{REQUEST_URI}/../ [L,R=301]


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


#remove .php and redirect
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]

Drive your way
iren K
На сайте с 28.12.2008
Offline
222
#1

RewriteCond %{REQUEST_URI} ^([^.]+)/$

RewriteRule ^[^.]+/$ /%1 [QSA,L]

c уважением Iren
J
На сайте с 20.02.2014
Offline
94
jkm
#2
Neptoon:

#remove end-slash 

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


#remove .php and redirect
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]

Этот фрагмент заменить на такой:

#remove end-slash

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


#remove .php and redirect
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{DOCUMENT_ROOT}/$1/index.php -f
RewriteRule ^(.+)$ $1/index.php [L]

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

DirectorySlash off

Тогда при запросе /de будет вызван /de/index.php

Если удалить правило:

RewriteCond %{DOCUMENT_ROOT}/$1/index.php -f

RewriteRule ^(.+)$ $1/index.php [L]

То при запросе /de будет вызван /de.php

totamon
На сайте с 12.05.2007
Offline
346
#3
Neptoon:
Нужно, чтобы вместо site.com/de/ было site.com/de

где вы такие дикие идеи берете? зачем ломать, то что правильно работает?

Хостинг от 90р ( https://goo.gl/h1VRkY ) и ВПС от 161р ( https://goo.gl/vw9JH7 ) 14 дней бесплатный тест! Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno а тут ВПС за 1,25$ https://8fn.ru/vps1doll Монетизация любых сайтов PUSHами ( https://8fn.ru/push ) - лучшая цена клика и показа ;)
Neptoon
На сайте с 12.07.2011
Offline
126
#4
totamon:
где вы такие дикие идеи берете? зачем ломать, то что правильно работает?

На мой вкус, без слэша смотрится красивее.

Спасибо за помощь с кодом, сделал чуть по-другому.

Aisamiery
На сайте с 12.04.2015
Offline
206
#5
totamon:
где вы такие дикие идеи берете? зачем ломать, то что правильно работает?

а можно уточнить где написано что это правильно? :)

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
S
На сайте с 30.09.2016
Offline
459
#6
Aisamiery:
а можно уточнить где написано что это правильно? :)

А сами не можете поискать? Если на конце слэш - сервер начинает искать именно папку (каталог, directory), если без слэша - обычный файл. Вроде как общеизвестная вещь.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
Aisamiery
На сайте с 12.04.2015
Offline
206
#7
Sitealert:
А сами не можете поискать? Если на конце слэш - сервер начинает искать именно папку (каталог, directory), если без слэша - обычный файл. Вроде как общеизвестная вещь.

читал исходный документ RFC3986 нет там такого, где я еще должен был поискать не совсем понятно

PS. В терминологии ОС папка это тоже файл если что.

PPS. Вы еще давайте тут начните заливать, что все урлы без расширения на конце должны заканчиваться на слеш

SV
На сайте с 03.11.2008
Offline
1394
#8
Neptoon:
На мой вкус, без слэша смотрится красивее.

Нда.. кому-то шашечки, а кому-то ехать. Бывает.

Aisamiery:
а можно уточнить где написано что это правильно?

Можно я попробую догадаться?:

totamon:
то что правильно работает?

Иными словами - такая логика работы заложена разработчиками сайта/движка.

А где написано что это неправильно?

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Топики помощи с ⓌordPress (https://searchengines.guru/ru/forum/1032910 ) и основы безопасности сайтов ( https://searchengines.guru/ru/forum/774117 ). *** Помощь\консультации в топиках форума - БЕСПЛАТНО. Платные услуги ( https://wp.me/P3YHjQ-3 ) - с бюджетом от 150$ ***
S
На сайте с 30.09.2016
Offline
459
#9
Aisamiery:
читал исходный документ RFC3986 нет там такого, где я еще должен был поискать не совсем понятно

Это логика работы апача

Если запрашивается каталог (т.е. путь заканчивается /), обрабатывается файл, заданный директивой DirectoryIndex. Например, в случае директивы

DirectoryIndex index.html index.php

эапрос http://www.example.com/fish/ приведёт к попытке обработать файл /var/www/html/fish/index.html. В случае, если этот файл не существует, следующей попыткой будет обработка файла /var/www/html/fish/index.php.
То есть ясно написано, что апач воспринимает URL как каталог при наличии слэша на конце.
Aisamiery:
Вы еще давайте тут начните заливать, что все урлы без расширения на конце должны заканчиваться на слеш
Ни в коем случае. Разговор идёт именно про папку, у ТС вопрос именно про неё. Папка - это физически существующий каталог (directory).

Про роутинг речи нет, это совсем другая история.

M
На сайте с 04.12.2013
Offline
185
#10

Neptoon, см. mod_dir DirectorySlash. Нужно изменить дефолтное значение на Off или отключить сам модуль. Пример того, что можно написать в .htaccess, найдете в первой кодовой вставке тут.

Только учтите, что у вас могут возникнуть проблемы с относительными адресами в соотв. адресной ветке, т.к. вы меняете уровень вложенности тек. адреса в браузере. Используйте абс. адреса, например формата /path, или лучше не лезьте в это дело.

Для сомневающихся демка от меня: http://g09.ru/files (все каталоги в этой ветке, включая files, существуют физически).

---------- Добавлено 01.05.2019 в 20:13 ----------

Sitealert, а ты уверен, что ТСу где-то нужен автоиндекс глубже корня?

Даже если автоиндекс не сработает, что мешает дописать этот рерайт самому?

Хостинг FOZZY ( http://fozzy.com.ru ) / Выслушаю предложения на домены ( http://u75.ru/domains-for-sale ) / Домены и скрипт для коротких ссылок ( http://u75.ru/domains-for-shortcuts )

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