如何将查询字符串附加到错误文档

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 状态代码。

以上是关于如何将查询字符串附加到错误文档的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 将字符附加到 MongoDB 文档中的字符串

如何自动将查询字符串附加到 laravel 分页链接?

如何使用 Laravel 将查询字符串附加到分页链接

PHP如何在页面加载之前将查询字符串附加到URL

将字符串附加到grafana查询中的变量?

如果为空 jquery/javascript,则添加/附加查询字符串