.htaccess, перенаправить все на bye.php, даже с большим количеством косых черт, за исключением
Мне нужно,
в .htaccess
перенаправить все за домен, но даже с большим количеством косых черт и с косой чертой или без косой черты в конце, но с одним исключением.
Например
example.com/all/sites/should/redirect/to/one/file/
example.com/all/sites/should/redirect/to/one/file
Следует перейти к
example.com/bye.php
Но
example.com/exception
Должно работать, никакого перенаправления.
Я пробовал это.
# Turn rewriting on
Options +FollowSymLinks
RewriteEngine On
# Redirect all requests to bye.php
RewriteCond %{REQUEST_URI} !=/bye.php
RewriteCond %{REQUEST_URI} !.*\.png$ [NC]
RewriteCond %{REQUEST_URI} !.*\.jpg$ [NC]
RewriteCond %{REQUEST_URI} !.*\.css$ [NC]
RewriteCond %{REQUEST_URI} !.*\.gif$ [NC]
RewriteCond %{REQUEST_URI} !^/exception
RewriteRule .* /bye.php
RewriteEngine On
RewriteBase /
RewriteRule ^exception exception.php [QSA,L]
# Slash rules
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R]
Это работает, но, кажется, только для 1 косой черты.
example.com/one-slash
Когда я ввожу это
example.com/more/slashes
Это не работает, это перенаправление здесь.
example.com/bye.php/slashes/
1 answers
Я думаю, у вас есть две проблемы:
Вы не говорите, что ваш
bye.php
должен перенаправляться. Прямо сейчас вы указали его как перезапись, а не перенаправление. Вам нужно добавить к нему флаги[L,R]
, чтобы перенаправить его.Вам больше не нужны ваши правила косой черты. Поскольку вы не указали "последний" с флагом
[L]
в своем правилеbye.php
, правила косой черты также вступают в силу и вызывают неожиданное поведение.
Я думаю, что вы были бы хорошо с:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# Redirect all requests to bye.php
RewriteCond %{REQUEST_URI} !=/bye.php
RewriteCond %{REQUEST_URI} !.*\.png$ [NC]
RewriteCond %{REQUEST_URI} !.*\.jpg$ [NC]
RewriteCond %{REQUEST_URI} !.*\.css$ [NC]
RewriteCond %{REQUEST_URI} !.*\.gif$ [NC]
RewriteCond %{REQUEST_URI} !^/exception
RewriteRule .* /bye.php [L,R]
RewriteRule ^exception exception.php [QSA,L]