Ans*_*ari 100

尝试将其放入.htaccess文件中:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^(.*)$ /subdomains/sub/$1 [L,NC,QSA]
Run Code Online (Sandbox Code Playgroud)

对于更一般的规则(适用于任何子域,而不仅仅是sub)用这个替换最后两行:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]
Run Code Online (Sandbox Code Playgroud)

  • Ansari的解决方案可行,但是,当我导航到`http:// test.domain.com`时,URL会将我重定向到`http:// test.domain.com/subdomains/test /`.是否可以在最后没有显示`/ subdomains/test /? (2认同)
  • 在这种情况下,我相信您将不得不考虑使用[mod_proxy](http://httpd.apache.org/docs/2.2/mod/mod_proxy.html)并指定除了`L之外的'P`标志`. (2认同)
  • 不,当我只想显示“http://test.domain.com/”时,它会重定向到“http://test.domain.com/subdomains/test/” (2认同)

Lee*_*ski 50

我不是mod_rewrite专家,我经常讨论它,但我在我的一个网站上做过这个,它可能需要其他标志等取决于你的情况.我正在使用这个:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains/subdomain
RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L] 
Run Code Online (Sandbox Code Playgroud)

之后必须对网站其余部分进行任何其他重写规则,以防止它们干扰您的子域重写.

  • 作为参考,如果某人以`.htaccess`开头来到这个页面(就像我做的那样),除了创建实际的`.htaccess`文件,为了使它生效,你需要在你的``中设置`AllowOverride`. VirtualHost`设置(http://stackoverflow.com/a/22819550/1657502),启用Apache的`rewrite`模块,然后重启Apache(http://stackoverflow.com/a/5758551/1657502) (4认同)
  • 这是问题的正确答案 (3认同)

sta*_*een 15

您可以在htaccess中使用以下规则将子域重写为子文件夹:

RewriteEngine On

 #If the host is "sub.domain.com"
 RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
 #Then rewrite any request to /folder
 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]
Run Code Online (Sandbox Code Playgroud)

逐行解释:

  RewriteEngine on
Run Code Online (Sandbox Code Playgroud)

上面的行告诉服务器打开引擎以重写URL.

  RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
Run Code Online (Sandbox Code Playgroud)

此行是RewriteRule的条件,我们使用正则表达式模式匹配http主机.条件是,如果主机是sub.domain.com,则执行规则.

 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]
Run Code Online (Sandbox Code Playgroud)

该规则与http://sub.domain.com/foo匹配,并在内部将其重定向到http://sub.domain.com/folder/foo.

将sub.domain.com替换为您的子域和文件夹,其中包含您要指向子域的文件夹的名称.


Pab*_*lla 8

我遇到了同样的问题,并在http://www.webmasterworld.com/apache/3163397.htm中找到了详细的解释

我的解决方案(子域内容应该在一个名为的文件夹中sd_subdomain:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} subdomain\.domain\.com
RewriteCond $1 !^sd_
RewriteRule (.*) /sd_subdomain/$1 [L]
Run Code Online (Sandbox Code Playgroud)