使用htaccess的动态子域:URL不应在浏览器中更改

时间:2012-03-10 02:51:49

标签: mod-rewrite wildcard-subdomain

尝试使用htaccess实现子域。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP_HOST} !^www.
    RewriteCond %{HTTP_HOST} ^([a-z0-9]+)\.domain.com(.*)$
    RewriteRule ^(.*)$ http://domain.com/index.php?/public_site/main/%1/$1 [L]
</IfModule>

当我输入 ahser.domain.com 时,浏览器网址正在发生变化。是否有一个htaccess选项,在RewriteRule中使用绝对URL时不会发生这种情况?

1 个答案:

答案 0 :(得分:0)

不要重写为包含域名的完整网址。这会产生一个重定向,因为它会转到另一个网站!你可以把microsoft.com放在那里;那么如果没有重定向它会如何工作?

您需要做的是确保网页在原始域下运行。因此,当客户端要求myname.domain.com/...如何将其重写为myname.domain.com/index.php?public_site/main/myname/...时。保持域名相同。 index.php?可以在任何这些域中使用。例如,即使这样也可行:

http://OTHER.domain.com/index.php?public_site/main/MYNAME/...

即。设置它以便哪个虚拟主机访问该路径无关紧要。

一旦你有了,那么重写就可以了:

# will not trigger redirect
RewriteRule ^(.*)$ /index.php?/public_site/main/%1/$1 [L]

您必须小心不要引入循环,因为您现在将URL重定向到更长的URL,该URL与相同的重写rulet相同的域匹配。如果网址已经以RewriteCond开头,则您需要额外的/index.php?public_site/才能应用此重写。