php mod_rewrite无法从rewritecond获取第二个参数

时间:2011-09-22 22:15:54

标签: apache mod-rewrite url-rewriting subdomain

我有一台服务器,我正在设置将子域重写为get参数

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

我已使用值为*的A记录设置域,并且我已将服务器设置为ALIAS * .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]

然后我在request参数中得到 index.php 。如果这会告诉你一些额外的东西。

修订

Per John的建议我尝试了以下

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。

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

1 个答案:

答案 0 :(得分:1)

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

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