是否可以使用.htaccess将子域重写为目录?
例:
显示内容
Answers:
尝试将其放在您的.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]
http://test.domain.com/subdomains/test/
当我只想显示它时,它会重定向到,http://test.domain.com/
test.domain.com/subdomains/test
-也许这里还有其他事情。您可以RewriteBase /
在之后添加RewriteEngine on
吗?另外,如果要保持显示状态test.domain.com
,则必须使用mod_proxy和[P]
标志。
我不是mod_rewrite专家,我经常为此感到困扰,但是我已经在我的一个站点上做到了这一点,根据您的情况,它可能还需要其他标志等。我正在使用这个:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains/subdomain
RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L]
此网站其余部分的所有其他重写规则都必须随后执行,以防止它们干扰您的子域重写。
.htaccess
谈到这个页面(像我一样),除了创造实际的.htaccess
文件,因为它生效,你需要设置AllowOverride
你的VirtualHost
设置(stackoverflow.com/a/22819550/1657502) ,启用Apache的rewrite
模块,然后重新启动Apache(stackoverflow.com/a/5758551/1657502)
www.
最好通过重定向而不是重写来支持可选前缀。
您可以在.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替换为您的子域和文件夹,并将其替换为您要将子域指向的文件夹的名称。
我遇到了同样的问题,并在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]
尝试将此.htaccess文件放在子域文件夹中:
RewriteEngine On
RewriteRule ^(.*)?$ ./subdomains/sub/$1
当您只希望它显示http://sub.domain.com/时,它将重定向到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。
http://test.domain.com
,URL会将我重定向到http://test.domain.com/subdomains/test/
。是否可以不显示/subdomains/test/
结尾?