Назад | Перейти на главную страницу

Не удается заставить правило RewriteCond работать в mod_rewrite

У меня следующий путь:

http://www.domain.com/cgi-bin/hsrun.exe/Distributed/Postphil/postphil.htx;start=DetectLanguage?Language=LANG_Icelandic

Если путь содержит папку / postphil, я хочу перенаправить на новый домен

Но мне не удалось заставить правило RewriteCond работать

RewriteCond %{REQUEST_URI} ^postphil+ [NC]
RewriteRule ^(.*)$ https://www.newdomain.com/ [R=301,L] 

Я пользуюсь онлайн-тестером на тестер правил перезаписи попытаться выяснить что-то, что работает, но безуспешно.

Есть идеи, как написать условие RewriteCond?

Контекст может иметь значение для правил перезаписи. Если ваш RewriteCond находится в .htaccess файл или внутри <Directory > блок, в URI нет ведущей косой черты. Если он присутствует в любой другой части конфигурации Apache, URI будет начинаться с косой черты.

Причина этого в том, что в контексте каталога путь к файлу, ведущий к рассматриваемому каталогу, удаляется, и этот путь всегда заканчивается косой чертой.

В вашем случае тоже все это: /cgi-bin/hsrun.exe/Distributed/ перед Postphil бит, но вам нужно, чтобы URI начинался с postphil поэтому RewriteCond также не будет соответствовать по этой причине.

Конец регулярного выражения ( l+ ) означает "один или несколько l", что тоже немного странно, но поскольку оно делает соответствует единственной букве "l", которая должна работать.

Если все, что вам нужно, это именно то, что вы сказали: «Если путь содержит папку / postphil, которую я хочу перенаправить на новый домен», то это сработает, нет необходимости в RewriteCond:

RewriteRule postphil https://www.newdomain.com/ [NC,R,L]

Я использовал перенаправление 302, а не 301, потому что браузеры кешируют 301-е. Даже если вы измените цель перенаправления, если ваш браузер уже видел 301 для этого URL-адреса, он просто перейдет туда. Вы можете изменить его на 301, когда закончите тестирование и будете довольны тем, что он работает правильно.

Попробуйте это и скажите мне, работает ли это:

RewriteCond %{REQUEST_URI} postphil [NC]
RewriteRule (.*) https://www.newdomain.com/$1 [R=301,L] 

Пожалуйста прочтите это:

Перенаправление, изменение URL-адресов или перенаправление HTTP на HTTPS в Apache - все, что вы когда-либо хотели знать о правилах Mod_Rewrite, но боялись спросить