gpt4 book ai didi

apache - mod_rewrite 似乎忽略了 [L] 标志

转载 作者:行者123 更新时间:2023-12-01 09:13:01 25 4
gpt4 key购买 nike

我正在尝试使用 [L] RewriteRule 中的标志,但它似乎不起作用。如果您调用该页面,我希望这样:

www.domain.com/admin/

it redirects you to:

www.domain.com/backend.php

Otherwise, if you call any other page (except for some pages) it redirects to:

www.domain.com/index.php

Here is what I have so far:

RewriteEngine on

RewriteRule ^admin/(.*) /backend.php/$1 [L]

RewriteCond $1 !^(index\.php|admin|assets|images|uploads|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

如果我只使用第一条规则,它可以工作(但显然不会将其他页面重定向到 index.php)。如果我添加第二条规则,服务器似乎会忽略第一条规则(我认为它被第二条规则“覆盖”,即使我添加了 [L] 标志)

最佳答案

这不是 L作品。重写引擎将不断循环遍历所有规则,直到进入引擎的 URI 与出来的​​ URI 相同。 L只是告诉重写引擎停止在当前循环迭代中应用规则。所以说你有:

RewriteRule ^(.*)$ /foo/$1 [L]
RewriteRule ^(.*)$ /bar/$1 [L]

1 次迭代后,给定 URI /blah , 我得到 /foo/blah因为它在第一条规则之后停止重写(但仍会继续循环)。如果我删除 L :
RewriteRule ^(.*)$ /foo/$1
RewriteRule ^(.*)$ /bar/$1

1 次迭代后,给定 URI /blah , 我得到 /bar/foo/blah .两个规则都得到应用,一个接一个,因为 L没有阻止它。

您需要在第二个规则中添加一个条件以防止它重写第一个规则,其中任何一个都可以:
RewriteCond $1 !^(backend\.php|index\.php|admin|assets|images|uploads|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

或者:
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond $1 !^(index\.php|admin|assets|images|uploads|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

关于apache - mod_rewrite 似乎忽略了 [L] 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12319991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com