【问题标题】:php mod_rewrite cannot get second parameter from rewritecondphp mod_rewrite 无法从 rewritecond 获取第二个参数
【发布时间】:2011-11-23 05:47:36
【问题描述】:

我有一个服务器,我正在设置将子域重写为获取参数

所以, subdomain.example.com/blog/test 实际上会指向: example.com/index.php?website=subdomain&request=blog/test

我已使用值为 * 的 A 记录设置域,并且已将服务器设置为别名 *.example.com 到 example.com。所有这些都有效。

在我的 .htaccess 中有

RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteCond %{HTTP_HOST} ^([^/\.]+).example.com(.*)$ [NC]
RewriteRule ^(.*)$ index.php?website=%1&request=%2 [L]

当我转到 subdomain.example.com/blog/test 时,这是 $_GET 的 var_dump()

array(2) { ["website"]=> string(8) "subdomain" ["request"]=> string(0) "" } 

子域在网站参数中完美输入,但请求的其余部分不在请求参数中。有任何想法吗?我真的很感激帮助。提前致谢。

顺便说一句,如果我使用

RewriteRule ^(.*)$ index.php?website=%1&request=$1 [L]

然后我在请求参数中得到index.php。如果这告诉你一些额外的事情。

修正

根据约翰的建议,我尝试了以下方法

RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteCond %{HTTP_HOST} ^([^/\.]+).wescms.com(.*) [NC]
RewriteRule ^(.*)$ index.php?website=%1&request=%{REQUEST_URI} [NC,L]

如果您访问 subdomain.example.com/blog/test,REQUEST_URI 会返回 index.php 我对 $_SERVER 变量做了一个 var_dump(),在 REQUEST_URI 中它显示 /blog/test,但它没有通过 RewriteRule。

如果我在重写规则中使用 THE_REQUEST 而不是 REQUEST_URI,我会得到我需要的内容以及一些额外的位,但我希望能更多地了解为什么 REQUEST_URI 不像上一个示例那样工作。谢谢。

【问题讨论】:

    标签: apache mod-rewrite url-rewriting subdomain


    【解决方案1】:

    您的第二个RewriteCond%{HTTP_HOST} 匹配,后者仅包括请求的主机名,而不包括“路径”部分。

    请求的资源(基本上是主机名之后的 URL 部分)可用作 %{REQUEST_URI} 变量。在您的情况下,您可以直接在规则中使用该变量,而不是尝试在 RewriteCond 中捕获该数据。

    【讨论】:

    • 嗨,John,感谢您的快速响应,我尝试了您的建议,REQUEST_URI 回来了,其中包含 index.php。不是我需要的路径,我用更多细节修改了上面的问题。
    猜你喜欢
    • 2021-12-10
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    相关资源
    最近更新 更多