.htaccess重写子目录到目录
是否有可能使用.htaccess重写一个子域到一个目录?
例:
- http://sub.domain.com/
显示的内容
- http://domain.com/subdomains/sub/
尝试把这个在你的.htaccess文件中:
RewriteEngine on RewriteCond %{HTTP_HOST} ^sub.domain.com RewriteRule ^(.*)$ http://domain.com/subdomains/sub/$1 [L,NC,QSA]
对于一个更一般的规则(与任何子域,而不是sub
)使用这个replace最后两行:
RewriteEngine on RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com RewriteRule ^(.*)$ http://domain.com/subdomains/%1/$1 [L,NC,QSA]
我不是一个mod_rewrite的专家,我经常与它斗争,但我已经在我的一个网站上做了这个,它可能需要其他标志等等,这取决于你的情况。 我正在使用这个:
RewriteEngine on RewriteCond %{HTTP_HOST} subdomain.example.com$ RewriteCond %{REQUEST_URI} !^/subdomains/subdomain RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L]
其他任何网站的其他重写规则必须事后,以防止他们干扰你的子域重写。
您可以在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的条件,我们使用正则expression式模式匹配http主机。 条件说,如果主机是sub.domain.com然后执行规则。
RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]
该规则与http://sub.domain.com/foo相匹配,并在内部将其redirect到http://sub.domain.com/folder/foo 。
将sub.domain.comreplace为您的子域名和文件夹的名称,以指定您的子域名。
我遇到了同样的问题,并在http://www.webmasterworld.com/apache/3163397.htm中find了详细的解释;
我的解决scheme(子域内容应该在一个名为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]
redirect到子域的同一个文件夹:.httaccess
RewriteCond %{HTTP_HOST} !^www\. RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC] RewriteRule ^(.*)$ http://domain\.com/subdomains/%1
redirect子域名目录:
RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC] RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]
尝试将这个.htaccess文件放在子域文件夹上:
RewriteEngine On RewriteRule ^(.*)?$ ./subdomains/sub/$1
当您只希望显示http://sub.domain.com/时,它会redirect到http://domain.com/subdomains/sub/
对于任何子域请求,请使用以下命令:
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 。