.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/
Author: MrWhite, 2019-11-11

1 answers

Я думаю, у вас есть две проблемы:

  1. Вы не говорите, что ваш bye.php должен перенаправляться. Прямо сейчас вы указали его как перезапись, а не перенаправление. Вам нужно добавить к нему флаги [L,R], чтобы перенаправить его.

  2. Вам больше не нужны ваши правила косой черты. Поскольку вы не указали "последний" с флагом [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]
 2
Author: Stephen Ostermiller, 2019-11-11 14:12:18