【发布时间】:2012-05-25 10:13:00
【问题描述】:
【问题讨论】:
标签: apache .htaccess url-rewriting dns subdomain
【问题讨论】:
标签: apache .htaccess url-rewriting dns subdomain
尝试将其放入您的 .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 时,URL 会将我重定向到 http://test.domain.com/subdomains/test/。最后不显示/subdomains/test/可以吗?
L 之外指定P 标志。
http://test.domain.com/subdomains/test/,而我只希望它显示http://test.domain.com/
test.domain.com/subdomains/test - 也许这里还有其他事情发生。你能在RewriteEngine on 后面加上RewriteBase / 吗?此外,如果你想让它保持显示 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]
【讨论】:
这会将同一文件夹重定向到子域:
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/subdomains/%1
【讨论】:
尝试把这个 .htaccess 文件放在子域文件夹中:
RewriteEngine On
RewriteRule ^(.*)?$ ./subdomains/sub/$1
当您只希望它显示 http://sub.example.org/ 时,它会重定向到 http://example.org/subdomains/sub/。
【讨论】:
重定向子域目录:
RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC]
RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]
【讨论】:
对于任何子域请求,使用这个:
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。
【讨论】:
编辑文件.htaccess:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
【讨论】: