我正在尝试建立一个网站
examplesproject.co.uk
带有一个名为
的子域sub.examplesproject.co.uk 。
我使用的是Bluehost,因此我设置了子域名,并且 examplesproject.co.uk 和 sub都有相同的文档根目录。 examplesproject.co.uk 但我想要
的内容sub.examplesproject.co.uk
实际上位于
examplesproject.co.uk/sub 。
那么为什么我没有在 examplesproject.co.uk/sub 为子域设置文档根目录?因为那时,在本地开发中,我需要将这两个域视为完全独立的,这意味着没有相对的url,因为子域文件夹在主域内非常诱人,这似乎很愚蠢。
但是,如果有人浏览 sub.examplesproject.co.uk ,他们会获得与 examplesproject.co.uk 相同的内容,这是我不想要的,所以我在根文件夹中设置了htaccess重写,如下所示:
#rewite sub-domain to sub directory
RewriteCond %{HTTP_HOST} ^[www\.]*sub.examplesproject.co.uk [NC]
RewriteCond %{REQUEST_URI} !^/sub/.*
RewriteRule ^(.*) /sub/$1 [L]
这样可行,但是如果您浏览 examplesproject.co.uk/sub ,您仍然可以看到内容,我不希望同一内容有两个位置。但是,如果我重写这个子目录以在浏览器地址中显示子域,那么我创建一个循环,它继续进行循环。
作为另一个侧点,我希望我的主站点被迫使用www,所以我在root htaccess中也有以下内容..
#force add www on main domain
RewriteCond %{HTTP_HOST} ^examplesproject.co.uk$
RewriteRule ^(.*)$ http://www.examplesproject.co.uk$1 [R=301,L]
但是,我想强制子域名没有www infront即 http://sub.examplesproject.co.uk 而不是 http://www.sub。 examplesproject.co.uk 即可。要做到这一点,我尝试以下,但它似乎不适用于子域内的其他目录(如果这是有道理的)。 Anyhows这是我放在子目录中的代码(即 examplesproject.co.uk/sub ):
#force remove www on sub-domain
RewriteCond %{HTTP_HOST} ^www.sub.examplesproject.co.uk [NC]
RewriteRule ^(.*)$ http://sub.examplesproject.co.uk/$1 [L,R=301]
以为我会提到它会影响事情。
所以,我的问题是,如何实现一个好的设置:
以及
如果有人可以提供帮助,我将非常感激。顺便说一下,在本地我已经使用wamp和hosts文件设置虚拟主机 http:// examplesproject 和 http://sub.examplesproject 来复制在线行为。
非常感谢阅读。答案/建议欢迎。
答案 0 :(得分:0)
对Tim Post感到抱歉!我把这些内容放在这个时间!很好看这个。希望这有助于某人。
这是对我有用的解决方案(感谢网站管理员世界的Jim(jdMorgan)为此 - http://www.webmasterworld.com/apache/4254301.htm)..
将所有这些规则按此顺序放入根.htaccess:
# Externally redirect direct client requests for test subdomain subdirectory paths to the test subdomain
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /sub/([^\ ]*)\ HTTP/
RewriteRule ^sub/(.*)$ http://sub.examplesproject\.co\.uk [R=301,L]
#
# Externally redirect all non-canonical, non-blank, non-test-subdomain hostname requests to canonical "www" main domain
RewriteCond %{HTTP_HOST} !^(www\.examplesproject\.co\.uk)?$
RewriteCond %{HTTP_HOST} !^([^.:]+\.)*sub\.([^.:]+\.)*examplesproject\.co\.uk [NC]
RewriteRule ^(.*)$ http://www.examplesproject.co.uk$1 [R=301,L]
#
# Externally redirect non-canonical subdomain hostname requests to canonical test subdomain
RewriteCond %{HTTP_HOST} ^([^.:]+\.)*sub\.([^.:]+\.)*examplesproject\.co\.uk [NC]
RewriteCond %{HTTP_HOST} !^sub\.examplesproject\.co\.uk$
RewriteRule ^(.*)$ http://sub.examplesproject.co.uk/$1 [R=301,L]
#
# Internally rewrite sub-domain requests to subdirectory path
RewriteCond %{HTTP_HOST} ^sub\.examplesproject\.co\.uk$
RewriteCond $1 !^sub/
RewriteRule ^(.*)$ /sub/$1 [L]
检查now-first规则中的THE_REQUEST可防止遇到无限重定向循环问题。
请注意,由于非常谨慎地使用区分大小写和锚定,现在会强制使用确切的主机名。
很好的一个人!