如何将查询字符串附加到错误文档
Posted
技术标签:
【中文标题】如何将查询字符串附加到错误文档【英文标题】:how to append a query string to error document 【发布时间】:2014-06-16 11:55:58 【问题描述】:是否可以捕获查询字符串并将其附加到错误文档 (404)。比如:
请求的页面:
http://www.example.com/sdsdsd
重定向到:
http://www.example.com/404.php?pg-name=sdsdsd
【问题讨论】:
【参考方案1】:除了在 htaccess 配置中使用 ErrorDocument,您可以像这样强制真正重定向到 error.php:
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /error.php?pg-name=%REQUEST_FILENAME [L]
来源:How to get `$_POST` query when 404 redirected through .htaccess?
然后您可以在error.php页面中检查是否将pg-name参数提供给error.php:
echo '<pre>';
print_r($_GET);
echo '</pre>';
如果你这样称呼你的页面:http://domain1.com/asdasdasd(假设没有找到链接),error.php 的输出将如下所示:
Array
(
[pg-name] => /path_to/public_html/asdasdasd
)
然后你可以得到请求的字符串“asdasdasd”。
【讨论】:
我正在使用这个 RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule ^(.+)$ /404.php?pg-name=$1 [L,R]但问题是它没有将标头设置为 404,而是将标头设置为 302 “强制进行真正的重定向” - 请注意,这是内部重写,而不是外部“重定向”。这很好,您不想“重定向”(RewriteRule
上的R
标志)请求,否则将向用户发送 3xx 状态。但是,您需要在 error.php
中手动设置适当的 404 HTTP 状态代码。以上是关于如何将查询字符串附加到错误文档的主要内容,如果未能解决你的问题,请参考以下文章