有一个现有的网站,其平面文件结构中包含大量带有查询字符串的url.我的问题是我写了CMS,并设置了一个自定义错误代码页,该页使用如下查询字符串:
ErrorDocument 404 /error.php?errorcode=404
这样做的问题是,如果旧的损坏的url有一个查询字符串,这将覆盖errordocument redirct中的查询字符串.例如,如果您这样做
www.example.com/missingpage.php – this will work and redirect to the 404 without issue.
但是如果你这样做
www.example.com/missingpage.php?anything=anything
甚至
www.example.com/missingpage.php?
errorcode = 404查询字符串不会进入php页面,并且当errorcode不匹配时,它将抛出我已设置的通用消息.问题在于,各种疯狂的查询字符串都有很多链接,因此很难单独过滤掉它们.
有人遇到过这个问题吗?
解决方法:
您可以做的其他事情是使用mod_rewrite并附加查询字符串.我之前在其他设置上已经看到了这一点,因为ErrorDocument目标通过URL映射引擎(至少在Apache 2.4中)被放回了.
例如:
ErrorDocument 404 /error-doc-404
ErrorDocument 405 /error-doc-405
ErrorDocument 500 /error-doc-500
然后你有这个:
RewriteEngine On
RewriteRule ^error-doc-([0-9]{3})$/error.php?errorcode=$1 [L]
这样,地址栏上的URL不会更改.