2012-06-03 124 views
3

有一个现有的网站与一个平面文件结构与查询字符串丰富的网址万吨。我的问题是我写的一个CMS和已经安装使用查询字符串像一个自定义错误代码页:htaccess与查询字符串问题

的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

简单的解决方案,制作一个特定的404.PHP页面。我的项目中有一个完整的目录,用于所有这些自定义错误页面。

+0

我试图避免这种情况,因为我想使用CMS的现有代码库来允许通过它编辑代码。很明显,我可以从每个错误页面的数据库中读取数据,并创建一个控件来编辑这些记录,但那就是更多的页面和代码。我尽量减少文件,因为它增加了代码维护的道路。希望有人遇到过这种情况,并会看到这一点。不过谢谢。 –

0

我发现了另一个选项,尽管它不是100%理想的。如果您在错误文档定义中使用完整的URL,它将执行重定向并忽略原始URL查询字符串。例如,如果你这样做:

的ErrorDocument /error.php?error=404

不良URL,它用来访问页面的用户将保持在地址栏和您的查询字符串会被地址栏中的任何内容覆盖。但如果你

的ErrorDocument http://www.google.com/error.php?error=404

然后会发生重定向和原来的“坏” URL中使用将与错误文件一个被替换的用户。

这是您必须知道的警告。这是一个软404错误,所以搜索引擎可能会讨厌你的胆量。

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] 

通过这种方式,地址栏上的网址不会得到改变。