为本地开发设置的简单子域名(htaccess?)

时间:2011-01-17 18:30:43

标签: .htaccess mod-rewrite subdomain relative-path virtualhost

我正在尝试建立一个网站

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]

以为我会提到它会影响事情。

所以,我的问题是,如何实现一个好的设置:

  1. 我可以使用相对URL来开发和实现我的子域。
  2. 浏览 http://sub.examplesproject.co.uk 显示 http://www.examplesproject.co.uk/sub
  3. 浏览 http://www.examplesproject.co.uk/sub 不会通过显示内容来复制子域(用于搜索引擎优化目的)
  4. 以及

    1. 主域 examplesproject.co.uk 被迫使用www - http://www.examplesproject.co.uk
    2. 子域名sub.examplesproject.co.uk强制使用www - http://sub.examplesproject.co.uk
    3. 如果有人可以提供帮助,我将非常感激。顺便说一下,在本地我已经使用wamp和hosts文件设置虚拟主机 http:// examplesproject http://sub.examplesproject 来复制在线行为。

      非常感谢阅读。答案/建议欢迎。

1 个答案:

答案 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可防止遇到无限重定向循环问题。

请注意,由于非常谨慎地使用区分大小写和锚定,现在会强制使用确切的主机名。

很好的一个人!