На моем веб-сайте я использую только 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]
Как я могу этого добиться?
В качестве первого правила после директивы 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
, .png
и т. д.). Я обновлю свой ответ.
Вы можете добавить это правило чуть ниже RewriteEngine On
строки:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+/[^/]+/).+$ /$1 [R=301,L,NE]
Я ценю ваш ответ! Хотел бы я принять оба, поскольку оба ответа полезны. :(
Можно ли изменить это, чтобы оно не влияло на мои файлы CSS/JS? Возможно, проверив, не существует ли местоположение (поскольку URL-адреса переписаны)?