gpt4 book ai didi

apache - mod_rewrite 规则以防止查询字符串

转载 作者:行者123 更新时间:2023-12-05 00:39:17 24 4
gpt4 key购买 nike

好的,我正在测试安装在我的个人网络服务器上的 cms(joomla),然后再将其上线。
而且我希望能够阻止使用查询字符串,或者更重要的是阻止用户在查询字符串上输入内容(如 articleid 等更改),但仍然允许内部重定向使用查询字符串。

例子
阻止某人作为 url 输入
http://www.doamin.com/index.php?option=com_user&view=register
在没有查询字符串的情况下显示错误页面或重定向到 index.php

但仍然允许重写规则
RewriteRule ^Register$ index.php?option=com_user&view=register

RewriteCond %{QUERY_STRING} !^$
重写规则 ^index.php$ index.php? [R=301]
显然重定向所有查询字符串(但它也重定向/Register 这不是我想要的)

Register rewriterule 末尾的 [L] 标志也不会停止规则处理。

编辑:
最后在丹尼尔的插入下回答了这个问题。请参阅下面的答案

最佳答案

mod_rewrite documentation说:

When you want to erase an existing query string, end the substitution string with just a question mark.



虽然这句话没有提到,但重写规则一定不能使用 QSA旗帜。

至于仍然允许重写规则:
RewriteRule ^Register$ index.php?option=com_user&view=register

您可能希望它出现在重写规则下方以去除查询字符串。当匹配时, %{ENV:REDIRECT_STATUS}变量设置为 200 并且 mod_rewrite 再次运行重写规则。如果检查 %{ENV:REDIRECT_STATUS},则在第二次通过时,删除查询字符串的重写规则将匹配。不是200没用。

这将映射对 index.php 的所有请求(带或不带查询字符串)到 index.php没有查询字符串,但仍然允许 /Register被视为 /index.php?option=com_user&view=register :
RewriteCond %{ENV:REDIRECT_STATUS} !=200
RewriteRule ^index.php$ index.php?

RewriteRule ^Register$ index.php?option=com_user&view=register

或者,如果您想在请求 index.php 时重定向到错误页面有一个查询字符串:
RewriteCond %{ENV:REDIRECT_STATUS} !=200
RewriteCond %{QUERY_STRING} !=""
RewriteRule ^index.php$ error.php? [R,L]

RewriteRule ^Register$ index.php?option=com_user&view=register

但我只会使用 F旗帜:
RewriteCond %{ENV:REDIRECT_STATUS} !=200
RewriteCond %{QUERY_STRING} !=""
RewriteRule ^index.php$ - [F,L]

RewriteRule ^Register$ index.php?option=com_user&view=register

关于apache - mod_rewrite 规则以防止查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4580678/

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