是否可以使用.htaccess将子域重写为目录?示例:
.htaccess
http://sub.domain.example/
显示内容
http://domain.example/subdomains/sub/
dfty9e191#
请尝试将以下内容放入.htaccess文件:
RewriteEngine on RewriteCond %{HTTP_HOST} ^sub.domain.example RewriteRule ^(.*)$ /subdomains/sub/$1 [L,NC,QSA]
对于更一般的规则(适用于任何子域,而不仅仅是sub),请将最后两行替换为:
sub
RewriteEngine on RewriteCond %{HTTP_HOST} ^(.*)\.domain\.example RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]
7ivaypg92#
我不是mod_rewrite的Maven,经常和它斗争,但我已经在我的一个站点上做了这个。它可能需要其他标志,等等,取决于你的情况。我使用这个:
RewriteEngine on RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ RewriteCond %{REQUEST_URI} !^/subdomains/subdomain RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L]
任何其他重写规则的其余部分的网站必须去之后,以防止他们干扰您的子域重写。
dohp0rv53#
您可以在.htaccess中使用以下规则将子域重写为子文件夹:
RewriteEngine On # If the host is "sub.domain.example" RewriteCond %{HTTP_HOST} ^sub.domain.example$ [NC] # Then rewrite any request to /folder RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]
逐行说明:
RewriteEngine on
上面的行告诉服务器打开重写URL的引擎。
RewriteCond %{HTTP_HOST} ^sub.domain.example$ [NC]
这一行是RewriteRule的一个条件,我们使用正则表达式模式匹配HTTP主机。条件表示如果主机是sub.domain.example,则执行规则。
sub.domain.example
RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]
该规则匹配http://sub.domain.example/foo,并在内部将其重定向到http://sub.domain.example/folder/foo。将sub.domain.example替换为您的子域,并将文件夹替换为您要将子域指向的文件夹的名称。
http://sub.domain.example/foo
http://sub.domain.example/folder/foo
e0bqpujr4#
我遇到了同样的问题,并在http://www.webmasterworld.com/apache/3163397.htm中找到了详细的解释我的解决方案(子域内容应位于名为sd_subdomain的文件夹中:
sd_subdomain
Options +FollowSymLinks -MultiViews RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^www\. RewriteCond %{HTTP_HOST} subdomain\.domain\.example RewriteCond $1 !^sd_ RewriteRule (.*) /sd_subdomain/$1 [L]
b4qexyjb5#
这将重定向到子域的同一文件夹:
RewriteCond %{HTTP_HOST} !^www\. RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.example$ [NC] RewriteRule ^(.*)$ http://domain\.example/subdomains/%1
1cklez4t6#
尝试将此 .htaccess 文件放入子域文件夹:
RewriteEngine On RewriteRule ^(.*)?$ ./subdomains/sub/$1
当您只想让它显示 *http://sub.example.org/ * 时,它会重新导向至 *http://example.org/subdomains/sub/ *。
fwzugrvs7#
重定向子域目录:
RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC] RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]
y0u0uwnf8#
对于任何子域请求,请使用以下命令:
RewriteEngine on RewriteCond %{HTTP_HOST} !^www\.band\.s\.example RewriteCond %{HTTP_HOST} ^(.*)\.band\.s\.example RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9-z\-]+) RewriteRule ^(.*)$ /%1/$1 [L]
只要让一些文件夹相同的子域名你需要的。文件夹必须存在这样:domain.example/sub的值。
domain.example/sub
yquaqz189#
编辑文件 .htaccess:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
9条答案
按热度按时间dfty9e191#
请尝试将以下内容放入
.htaccess
文件:对于更一般的规则(适用于任何子域,而不仅仅是
sub
),请将最后两行替换为:7ivaypg92#
我不是mod_rewrite的Maven,经常和它斗争,但我已经在我的一个站点上做了这个。它可能需要其他标志,等等,取决于你的情况。我使用这个:
任何其他重写规则的其余部分的网站必须去之后,以防止他们干扰您的子域重写。
dohp0rv53#
您可以在.htaccess中使用以下规则将子域重写为子文件夹:
逐行说明:
上面的行告诉服务器打开重写URL的引擎。
这一行是RewriteRule的一个条件,我们使用正则表达式模式匹配HTTP主机。条件表示如果主机是
sub.domain.example
,则执行规则。该规则匹配
http://sub.domain.example/foo
,并在内部将其重定向到http://sub.domain.example/folder/foo
。将
sub.domain.example
替换为您的子域,并将文件夹替换为您要将子域指向的文件夹的名称。e0bqpujr4#
我遇到了同样的问题,并在http://www.webmasterworld.com/apache/3163397.htm中找到了详细的解释
我的解决方案(子域内容应位于名为
sd_subdomain
的文件夹中:b4qexyjb5#
这将重定向到子域的同一文件夹:
. http访问
1cklez4t6#
尝试将此 .htaccess 文件放入子域文件夹:
当您只想让它显示 *http://sub.example.org/ * 时,它会重新导向至 *http://example.org/subdomains/sub/ *。
fwzugrvs7#
重定向子域目录:
y0u0uwnf8#
对于任何子域请求,请使用以下命令:
只要让一些文件夹相同的子域名你需要的。文件夹必须存在这样:
domain.example/sub
的值。yquaqz189#
编辑文件 .htaccess: