gpt4 book ai didi

apache - 为什么此 RewriteRule 会更改 QUERY_STRING,但保留 REQUEST_URI 不变?

转载 作者:行者123 更新时间:2023-12-01 16:11:29 25 4
gpt4 key购买 nike

我有一份 Concrete5 副本,它是一个基于 PHP 的 CMS,在 example.com 上运行。

Concrete5 附带了以下关于漂亮 URL 的基本说明(将所有 URL 重定向到中央 index.php)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/c5.7
RewriteRule ^.*$ c5.7/$0 [L] # Concrete5 is running in the c5.7/ subdirectory
</IfModule>

非常简单。

现在我有一组采用以下形式的 URL:

 /product/{productname}

我需要转发到 Concrete5(虚拟)URL

/products/details?name={productname}

当我在浏览器中手动输入该 URL 时,该 URL 已设置并按预期工作。

所以我在 htaccess 文件中添加了一行,它现在看起来像这样:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# New rule for products
RewriteCond %{REQUEST_URI} ^/product/
RewriteRule ^product/(.+)$ /products/details?name=$1 [QSA]

RewriteCond %{REQUEST_URI} !^/c5.7
RewriteRule ^.*$ c5.7/$0 [L]

</IfModule>

我可以确认,当我选择随机的外部 URL 作为重定向目标时,会触发 RewriteRule

但是每当它是像上面这样的内部重定向时,会发生的情况是,我在 Concrete5 中收到 404。当我检查传递给它的内容时,我看到:

 REQUEST_URI:  /product/my-random-product
QUERY_STRING: name=my-random-product

看来规则已被触发并进行了一些重写,但 REQUEST_URI 保持不变!

为什么?

是因为 PHP 7.1 是通过 CGI 运行的吗?

我尝试了无数种变化,所有的 flags在书中,但收效甚微。

最佳答案

PHP 中的 REQUEST_URI 与 mod_rewrite 中的 REQUEST_URI 不同,因此不能这样做。在 PHP 中,它始终包含原始 URL。因此,如果您的 CMS 正在处理该问题,您就无法像这样更改它。

您应该将 CMS 设置为使用您想要的 URL,而不是像这样尝试增强 CMS 的 URL 重写。

如果您在 PHP 中检查 REDIRECT_URL,您将看到最后重写的 URI。

关于apache - 为什么此 RewriteRule 会更改 QUERY_STRING,但保留 REQUEST_URI 不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44160346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com