目标-删除查询字符串并重定向到父URL,如果QS不符合某些条件。因此,作为一个例子,这个URL与错误的QS:
https://www.example.com/view.php?id=qqq
应重定向至:
https://www.example.com/view.php
到目前为止我有这个:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(?!(mk=[1-9][0-9]{0,1}|id=[1-9][0-9]{0,3})$).*$
RewriteRule ^view\.php$ view.php? [L,R]
但它不工作,要么报告403错误,或500内部服务器错误,或太多的重定向,或没有网站CSS加载等,而检查它在WAMP。
我也试过这个:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(?!(mk=[1-9][0-9]{0,1}|id=[1-9][0-9]{0,3})$).*$
RewriteRule ^view\.php$ - [L]
它重定向很好,但不删除查询字符串。尝试与QSD标志了。
拜托,帮帮我。
3条答案
按热度按时间4bbkushb1#
试试这个:
第一部分检查以确保querystring存在以避免重定向循环。
第二部分检查查询字符串中是否存在id =或mk =参数。
然后第三部分重定向view.php(带或不带查询字符串)到同一个文件,但删除了查询字符串。这可能仍然会在URL中显示一个无用的问号,在这种情况下,看看
QSD
(querystring discard)更好。注意,使用了最后一个规则的L
标志。这将防止当前迭代的任何进一步重写。Apache仍然需要从顶部再次扫描文件,以确保它不需要进一步重写。如果这将遇到来自其他重写规则的重定向循环,您可能需要在. htaccess文件的顶部使用如下技巧:
如果您需要测试
mk=[1-9][0-9]{0,1}
或id=[1-9][0-9]{0,3}
,上述代码应该很容易编辑,只需将([^&]+)
的示例替换为数值逻辑即可。nbnkbykc2#
您的规则是好的,除了这个
.*
,这意味着0 or more match
,这就是为什么当您删除查询字符串循环发生,所以不需要更多的行,你只能改变这个部分.*
通过这个.+
,这意味着1 or more match
如下:drkbr07n3#
仅在末尾添加?将删除查询字符串。