Mod rewrite 具有htaccess:URL的动态子域不应在浏览器中更改

Mod rewrite 具有htaccess:URL的动态子域不应在浏览器中更改,mod-rewrite,wildcard-subdomain,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/m

正在尝试使用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>

重新启动发动机
重写基/
重写cond%{HTTP_HOST}^www。
重写cond%{HTTP\u HOST}^([a-z0-9]+)\.domain.com(.*)$
重写规则^(.*)$http://domain.com/index.php?/public_site/main/%1/$1[L]

当我进入ahser.domain.com时,浏览器URL正在更改。当在RewriteRule中使用绝对URL时,是否有一个htaccess选项不允许这种情况发生?

不要重写为包含域的完整URL。这将生成重定向,因为它将转到不同的网站!你可以把
microsoft.com
放在那里;那么,如果没有重定向,它将如何工作呢

你要做的是确保网页在原始域下工作。因此,当客户端要求
myname.domain.com/…
将其改写为
myname.domain.com/index.php?public\u 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已经以
/index.php?public_site/

开头,您需要一个额外的
RewriteCond
才能不应用此重写。我看到您现在使用
%
符号正确地从
RewriteCond
中获得了匹配的部分。我在你的代码中,在问题中发现了这个问题。您使用了解决方案,但未接受答案。抱歉。我是新用户。我需要至少15个声誉来接受答案。嗯。。。你是对的。我理解为什么重定向需要这样工作。嗯。。。你是对的。我理解重定向为什么需要这样工作。我希望在用户端有简单的URL。因此,如果我要在我的站点上实现子域,在用户端提供简单的URL,我认为在php中实现比htaccess更好。