Apache mod_rewrite子域和URL参数

我正在尝试编写一个Apache mod_rewrite,它可以从子域中获取信息,并在域之后将其作为一对variables传递给PHP脚本。

这是我迄今为止,与此我可以得到子域,或URL参数。

RewriteEngine On RewriteCond %{HTTP_HOST} ^([^./]+)\.domain\.com/([a-zA-Z0-9/-]+)$ RewriteCond %1 !=www RewriteRule ^ redirect.php?subdomain=%1&args=$2 RewriteRule ^/?([a-zA-Z0-9/-]+)$ redirect.php?args=$1 [L] 

mod_rewrite已启用,我们正在使用通配符Alogging将所有stream量指向此服务器* .domain.com

此外,如果在其他地方发布,我也表示歉意,我一直在试图解决这个问题,并在上​​个月,并没有find答案,或find答案张贴在任何地方。

正如Shane Madden已经提到的那样,第一个RewriteCond看起来不会匹配任何东西。 原因是双重的:首先是第一个. 不会被转义,其次,%{HTTP_HOST}variables不包含任何斜线,因此domain\.com之后的整个部分不会匹配任何内容。

 RewriteCond %{HTTP_HOST} ^([^./]+)\.domain\.com/([a-zA-Z0-9/-]+)$ 

我以前从来没有在RewriteCond的左边使用%1。 除非你确定这个工作正常,否则如果你有更多的问题,请尝试删除这条线来消除这个问题。 那里也不应该有一个=号。 简单!www就是你想要的。 如果您对此行有任何疑问,请将其更改为使用%{HTTP_HOST}variables而不是%1。

 RewriteCond %1 !=www 

这个RewriteRule的replace$2在模式中没有一组括号,因此它将是空的。 你可能会想要添加一个更大的模式到这个。 如果它只有一组匹配的括号,那么$ 1就是你想要的,即使你在replace中已经有了%1。 我怀疑你也会想要这个/redirect.php...如果你是在configuration文件中而不是在.htaccess中。

 RewriteRule ^ redirect.php?subdomain=%1&args=$2 

另外,我可能会添加,匹配简单^很容易创build循环。 小心那个。