我有一台服务器,我正在设置将子域重写为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在我的上一个示例中不起作用。谢谢。
答案 0 :(得分:1)
您的第二个RewriteCond
与%{HTTP_HOST}
匹配,%{REQUEST_URI}
仅包含请求的主机名,而不是“路径”部分。
请求的资源(基本上是主机名后面的URL部分)可用作RewriteCond
变量。在您的情况下,您可以直接在规则中使用变量,而不是尝试在{{1}}中捕获该数据。