Найдено результатов: 2

правило mod_rewrite для перенаправления всех запросов, кроме одного конкретного пути

Я пытаюсь перенаправить все запросы к моему домену на другой домен, используя mod_rewrite в объявлении Apache 2.2 VirtualHost. Есть одно исключение - я бы хотел, чтобы все запросы к /audio -му пути не перенаправлялись.

Я написал RewriteCond и RewriteRule, чтобы сделать это, но это не совсем правильно, и я не могу понять, почему. Регулярное выражение содержит отрицательный lookhead для строки "/audio", но по какой-то причине это не соответствует. Вот такое определение:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net(?!/audio) [NC]
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]

Если я изменю RewriteCond на:

RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net/(?!audio) [NC]

(т. е. поставьте косую черту вперед вне отрицательной части lookahead), то это работает, но недостатком этого является то, что запросы к mydomain.net без косой черты trailing не будут перенаправлены.

Может ли кто-нибудь указать мне, что я делаю не так?

(Примечание: угловые скобки вокруг домена в бите RewriteRule выше добавляются StackOverflow.com - их нет в фактическом коде!)


Вот такие правила:

<VirtualHost *:80>
ServerAdmin me@mydomain.net
DocumentRoot "/var/www/mydomain.net/htdocs"
ServerName www.mydomain.net
ServerAlias mydomain.net

RewriteEngine on
RewriteCond {REQUEST_URI} !^/audio
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
RewriteLog logs/mod_rewrite_log
RewriteLogLevel 3

ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>

Спасибо @mercutio - это вполне логично, но все равно кажется, что это не работает.

Вот что говорит журнал mod_rewrite, когда я делаю запрос на http://mydomain.net/audio/something.mp3 :

(2) init rewrite engine with requested uri /audio/something.mp3
(3) applying pattern '^(.*)$' to uri '/audio'
(2) rewrite '/audio' -> 'http://www.newdomain.net/'
(2) explicitly forcing redirect with http://www.newdomain.net
(1) escaping http://www.newdomain.net for redirect
(1) redirect to http://www.newdomain.net [REDIRECT/301]

Поскольку REQUEST_URI действительно начинается с /audio , я ожидаю, что RewriteRule будет проигнорирован.

apache   mod-rewrite    

390   1   16:51, 24th August, 2020


Есть ли негативные последствия при использовании Mod-Rewrite?

Я знаю, что есть много положительных вещей, которые mod-rewrite выполняет. Но есть ли какие-то негативные моменты? Очевидно, что если у вас плохо написаны правила, у вас будут проблемы. Но что, если у вас большой объем сайта и вы постоянно используете mod-rewrite, это будет иметь значительное влияние на производительность? Я быстро поискал некоторые ориентиры в Google и не нашел много.

performance   mod-rewrite    

402   3   23:09, 11th August, 2020