3

有一个具有平面文件结构的现有站点,其中包含大量带有查询字符串的 URL。我的问题是我编写了一个 CMS 并设置了一个自定义错误代码页面,该页面使用如下查询字符串:

错误文档 404 /error.php?errorcode=404

这个问题是如果旧的损坏的 url 有一个查询字符串,这会覆盖错误文档重定向中的查询字符串。例如,如果你这样做

www.example.com/missingpage.php - 这将起作用并毫无问题地重定向到 404。

但如果你这样做

www.example.com/missingpage.php?anything=anything

甚至

www.example.com/missingpage.php?

errorcode=404 查询字符串不会进入 php 页面,当错误代码不匹配时,它会抛出我设置的通用消息。问题是有大量的链接,包含各种疯狂的查询字符串,因此很难单独过滤掉它们。

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

4

3 回答 3

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]

这样,地址栏上的 url 就不会改变。

于 2012-06-04T16:48:58.970 回答
0

I found another option, even though it is not 100% ideal. If you use a full url in the error document definition it will do a redirect and ignore the original url query string. For instance if you do:

ErrorDocument /error.php?error=404

the bad url that the user used to access the page will remain in the address bar and your query string will be overwritten by whatever is in the address bar. but if you do

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

Then a redirect will occur and the original "bad" url the user used will be replaced with the error document one.

Here is the caveat that you must know. This is a soft 404 error so search engines might hate your guts.

于 2012-06-04T15:51:51.013 回答
0

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

于 2012-06-03T06:36:09.193 回答