开发者

Conditional rewrite in the regex, not with RewriteCond

开发者 https://www.devze.com 2023-04-11 14:58 出处:网络
I wrote a regex for a rewrite rule that includes a negative lookahead to replace the rewriteCond line, because WordPress only accepts two values: pattern -> substitution.

I wrote a regex for a rewrite rule that includes a negative lookahead to replace the rewriteCond line, because WordPress only accepts two values: pattern -> substitution.

It should find findme.html _here, regardless of where it's requested to be: mydomain.com/_here/findme.html e.g.

(Sorry, I can't modify the swf which will request findme.html in the wrong places)

So, given findme.html could be requested to be in, e.g.:

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

The rewrite should make them all

mydomain.com/_here/findme.html

So, I made a rewrite rule that Wordpress will accept me as follow

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

So it only matches URLs which doesn't contain "_here" in it, to prevent extra rewriting or a loo开发者_StackOverflowp.

The problem is IT DOES loop.

What did I miss?


It looks to me like you want to move the .* that is before (?!_here) to after it because (?!_here) is a negative lookahead, so it check that the text _here does not come after it. What your regular expression is actually checking is whether your url starts with some character sequence that is not followed by _here, and _here is a character sequence not followed by _here. Then your rule becomes

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

Also, it looks like your pattern will exclude paths with subdirectories such as

mydomain.com/directory/subdirectory/findme.html

If you also want to include those, the pattern should be

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

精彩评论

暂无评论...
验证码 换一张
取 消