开发者

Mod_Rewrite Difference between [L] and [R]

开发者 https://www.devze.com 2023-03-28 07:51 出处:网络
I am attempting t开发者_高级运维o rewrite any URL with \"_excaped_fragment_=/some/directory\" to \"/some/directory?ajax=1\".The code below is working correctly but i would like to do it without the re

I am attempting t开发者_高级运维o rewrite any URL with "_excaped_fragment_=/some/directory" to "/some/directory?ajax=1". The code below is working correctly but i would like to do it without the redirect. This is a Wordpress site.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    AddDefaultCharset UTF-8

    RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
    RewriteRule (.*) %1?ajax=1 [L,R=301]

    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

If I remove "R=301" and just leave the "L" it does not work. I have read about [L] not stopping when from .htaccess, but i actually do not want it to stop. I would like it to just change the URL then go through the regular Wordpress rewrite.

Any ideas? Let me know if you need more information.

Edit: Wanted to add an answerable question. Why does a redirect work and no redirect not work? Does the URL get changed as it works its way down the file or only on the last rule?


The [L] will stop any further processing in .htaccess if the rule matched.

The way you have this written the [L] will do that, but then you add [R=301] which is a redirect. That will cause the request to be sent back to the "top of the stack" in Apache for processing as if it was a completely new request, since you are doing a redirect. HOWEVER, now on the 2nd time through you've got the modified URL because the rewrite was processed before doing the hand-off.

In other words [L] does the mangling, then says "OK, we are done here, drop out to normal web processing now".

[L,R=301] does the mangling, then says "we are done with THAT, now got tell whomever is next is line that we've done a redirect".

That last part of the [L,R=301] triggers a whole new set of logic to process the "hey, we just got a redirect" rules. In your case, causing the entire rewrite sequence to be processed from the top with the mangled URL this time around.

0

精彩评论

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