Условное переписывание в регулярном выражении, а не с помощью RewriteCond - PullRequest
0 голосов
/ 06 октября 2011

Я написал регулярное выражение для правила перезаписи, которое включает в себя отрицательный запрос на замену строки rewriteCond, поскольку WordPress принимает только два значения: pattern -> substitution.

Он должен найти findme.html _here, независимо отгде он должен быть: mydomain.com/_here/findme.html например,

(извините, я не могу изменить swf, который будет запрашивать findme.html в неправильных местах)быть приглашенным, например:

mydomain.com/findme.html
mydomain.com/directory/findme.html
mydomain.com/directory/findme.html?someparam=3

Перезапись должна сделать их всех

mydomain.com/_here/findme.html

Итак, я сделал правило переписывания, что Wordpress примет менякак следует

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^.*(?!_here)/*findme\.html$ /_here/findme.html [R=301,L]

Таким образом, он сопоставляет только те URL-адреса, которые не содержат "_here", чтобы предотвратить дополнительное переписывание или цикл.

Проблема в том, что это делает цикл.

Что я пропустил?

1 Ответ

0 голосов
/ 06 октября 2011

Мне кажется, что вы хотите переместить .*, который стоит перед (?!_here), после него, потому что (?!_here) является отрицательным прогнозом , поэтому он проверяет, что текст _here делаетне приходи после этого.На самом деле ваше регулярное выражение проверяет, начинается ли ваш URL с некоторой последовательности символов, за которой не следует _here, а _here - это последовательность символов, за которой не следует _here.Тогда ваше правило становится

RewriteRule ^(?!_here).*/*findme\.html$ /_here/findme.html [R=301,L]

Кроме того, похоже, что ваш шаблон исключит пути с подкаталогами, такими как

mydomain.com/directory/subdirectory/findme.html

Если вы также хотите включить их, шаблон должен быть

RewriteRule ^(?!_here)(.*/)*findme\.html$ /_here/findme.html [R=301,L]
...