hostgator:通配符子域映射到URL

时间:2012-03-09 10:09:24

标签: mod-rewrite

过去3小时,我一直在hostgator共享托管服务器上遇到此问题。这是最简单的问题。

这是我想要发生的映射: subdomain.domain.com - > www.domain.com/test.php?user=subdomain

但出于某种原因,每当我输入“subdomain.domain.com”时,重定向都不会发生,甚至URL也不会在我的浏览器中发生变化。我看到加载页面上列出了test.php文件(因为我在服务器上的唯一文件是.htaccess和test.php)。

这是.htacess代码

     <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteBase /

            <IfModule mod_proxy.c>
                    RewriteCond %{HTTP_HOST} !^www. [NC]
                    RewriteCond %{HTTP_HOST} ^([a-z0-9]+).domain.com(.*)$ [NC]
                    RewriteRule ^(.*)$ http://www.domain.com/test.php?user=$1$2 [P,L]
            </IfModule>

            <IfModule !mod_proxy.c>
                    RewriteCond %{HTTP_HOST} !^www. [NC]
                    RewriteCond %{HTTP_HOST} ^([a-z0-9]+).domain.com(.*)$ [NC]
                    RewriteRule ^(.*)$ http://www.domain.com/test.php?user=$1$2 [R=301,L]
            </IfModule>
    </IfModule>

这是test.php代码

<?php echo $_GET['user']; ?>

有谁知道这里的问题是什么?支持对我没有帮助。我认为服务器配置有问题。

1 个答案:

答案 0 :(得分:0)

RewriteCond反向引用使用百分比,而不是美元符号! %1不是1美元。

RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteCond %{HTTP_HOST} ^([a-z0-9]+).domain.com(.*)$ [NC]
                          ^ %1                  ^ %2
RewriteRule ^(.*)$ http://www.domain.com/test.php?user=$1$2 [R=301,L]
             ^$1                                       ^^^^ oops

$1意味着从左边的正则表达式中拉出一些东西; %1表示从RewriteCond拉出来。你可能会将整个比赛视为用户部分,假设重写者没有注意到$2是悬挂的反向引用这一事实。