查询字符串的htaccess问题

时间:2012-06-03 03:47:55

标签: php apache .htaccess

现有的网站具有平面文件结构,其中包含大量带有查询字符串的网址。我的问题是我写了一个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页面,它会抛出我在错误代码不匹配时设置的通用消息。问题是有很多很多链接与各种疯狂的查询字符串,所以很难单独过滤它们。

之前有没有人遇到过这个问题?

3 个答案:

答案 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错误,所以搜索引擎可能会讨厌你的内心。