87

是否可以使用 .htaccess 将子域重写到目录?

例子:

显示的内容

4

9 回答 9

112

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

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

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

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]
于 2012-05-17T19:56:48.403 回答
51

我不是 mod_rewrite 专家,并且经常为此苦苦挣扎,但我已经在我的一个网站上做到了这一点。根据您的情况,它可能需要其他标志等。我正在使用这个:

RewriteEngine on

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

站点其余部分的任何其他重写规则必须在之后执行,以防止它们干扰您的子域重写。

于 2013-12-04T22:54:22.887 回答
20

您可以在.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]

逐行解释:

  RewriteEngine on

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

  RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]

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

 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

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

sub.domain.com替换为您的子域,将文件夹替换为您要将子域指向的文件夹的名称。

于 2016-01-18T15:03:22.377 回答
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]
于 2014-01-17T10:25:44.590 回答
4

这会将同一文件夹重定向到子域:

.httaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/subdomains/%1
于 2015-11-12T02:17:45.687 回答
3

尝试将此.htaccess文件放在子域文件夹中:

RewriteEngine On

RewriteRule ^(.*)?$ ./subdomains/sub/$1

当您只希望它显示http://sub.example.org/时,它会重定向到http://example.org/subdomains/sub/

于 2016-12-30T02:39:21.040 回答
2

重定向子域目录:

RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC]
RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]
于 2016-04-27T06:04:38.487 回答
0

对于任何子域请求,请使用:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.band\.s\.co 
RewriteCond %{HTTP_HOST} ^(.*)\.band\.s\.co 
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9-z\-]+) 
RewriteRule ^(.*)$ /%1/$1 [L] 

只需制作一些与您需要的子域名相同的文件夹。文件夹必须像这样存在:domain.com/sub for sub.domain.com

于 2016-05-12T22:11:18.980 回答
0

编辑文件.htaccess

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
于 2021-02-17T05:03:24.827 回答