php-查询字符串的htaccess问题

有一个现有的网站,其平面文件结构中包含大量带有查询字符串的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不会更改.

上一篇:PHP-Mod_Rewrite扩展删除功能更改404的功能


下一篇:php .htaccess网址重写错误的参数