现有的网站具有平面文件结构,其中包含大量带有查询字符串的网址。我的问题是我写了一个CMS并设置了一个自定义错误代码页,它使用了一个查询字符串,如:
ErrorDocument 404 /error.php?errorcode=404
这个问题是如果旧的破坏的URL有一个查询字符串,这会覆盖errordocument redirct中的查询字符串。例如,如果你这样做
www.example.com/missingpage.php - 这样可以正常工作并重定向到404.
但如果你这样做
www.example.com/missingpage.php?anything=anything
甚至
www.example.com/missingpage.php?
errorcode = 404查询字符串不会进入php页面,它会抛出我在错误代码不匹配时设置的通用消息。问题是有很多很多链接与各种疯狂的查询字符串,所以很难单独过滤它们。
之前有没有人遇到过这个问题?
答案 0 :(得分:3)
您可以做的其他事情是使用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]
这样,地址栏上的网址就不会被更改。
答案 1 :(得分:0)
简单的解决方案,制作一个特定的404.PHP页面。我的项目中有一个完整的目录,用于所有这些自定义错误页面。
答案 2 :(得分:0)
我找到了另一种选择,即使它不是100%理想。如果您在错误文档定义中使用完整的URL,它将执行重定向并忽略原始URL查询字符串。例如,如果你这样做:
ErrorDocument /error.php?error=404
用户用来访问该页面的错误网址将保留在地址栏中,您的查询字符串将被地址栏中的任何内容覆盖。但如果你这样做
ErrorDocument http://www.google.com/error.php?error=404
然后会发生重定向,用户使用的原始“坏”网址将替换为错误文档1。
这是你必须知道的警告。这是一个软404错误,所以搜索引擎可能会讨厌你的内心。