.htaccess — удалить все после третьей косой черты в пути

На моем веб-сайте я использую только 3 косые черты в своем URL-адресе:

https://example.com/this/isatest/

Прямо сейчас я использую .htaccess, что позволяет (в качестве побочного эффекта) добавлять в URL столько элементов, сколько вам нужно:

https://example.com/this/isatest/hipperdihopperdus/pizza/bacon/with/cheese

Я хотел бы автоматически удалить все после «isatest», сохранив косую черту в конце, используя .htaccess.

Вот как сейчас выглядит мой .htaccess:

Options -Indexes
Options +FollowSymLinks
RewriteEngine on

# 301 Redirect all requests that don't contain a dot or trailing slash to
# include a trailing slash
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]

RewriteCond %{THE_REQUEST} /index\.html [NC]
RewriteRule ^index\.html$ /? [R=301,L,NC]

RewriteRule ^listen/$ /console/ [NC,L]

# Rewrites urls in the form of /parent/child/
# but only rewrites if the requested URL is not a file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [L,QSA]

Как я могу этого добиться?

Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
483
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В качестве первого правила после директивы RewriteEngine вы можете сделать что-то вроде следующего:

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

Это проверяет, есть ли что-нибудь еще (точка) после двух сегментов пути и косой черты, и перенаправляет на удаленное «что-нибудь еще».

Обратите внимание, что это перенаправление 302 (временное). Измените это на 301 (постоянное) перенаправление — если это намерение — только после того, как вы подтвердите, что оно работает нормально. Это делается для того, чтобы браузер не кэшировал ошибочные перенаправления во время тестирования.

Обновлено: Может оказаться более эффективным просто избегать перенаправления файлов, которые заканчиваются распознаваемым расширением файла. Или, возможно, исключите известные местоположения каталогов ваших статических ресурсов. Например:

RewriteCond %{REQUEST_URI} !\.(css|js|jpg|png|gif)$ [NC]
RewriteRule ^([^/]+/[^/]+/). /$1 [R=302,L]

ИЛИ,

RewriteCond %{REQUEST_URI} !^/static-resources/
RewriteRule ^([^/]+/[^/]+/). /$1 [R=302,L]

Можно ли изменить это, чтобы оно не влияло на мои файлы CSS/JS? Возможно, проверив, не существует ли местоположение (поскольку URL-адреса переписаны)?

Appel Flap 30.05.2019 23:10

Да, вы можете добавить проверку файловой системы или просто избегать перенаправления запросов, оканчивающихся на .css (и/или .js, .png и т. д.). Я обновлю свой ответ.

MrWhite 30.05.2019 23:13

Вы можете добавить это правило чуть ниже RewriteEngine On строки:

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

Я ценю ваш ответ! Хотел бы я принять оба, поскольку оба ответа полезны. :(

Appel Flap 30.05.2019 23:15

Другие вопросы по теме