从托管的apache服务器上的子域访问根域

时间:2013-09-09 05:25:53

标签: apache .htaccess mod-rewrite configuration web-hosting

我有一个域名: mydomain.com 指向可托管多个域的托管apache服务器“premium”帐户。 我购买了另一个域:anotherDomain.com我将其设置为我的网络托管服务商的“添加”域名。我可以通过几种不同的方式访问anotherDomain:

mydomain.com/anotherDomain.com
anotherDomain.mydomain.com

anotherDomain.com

但是,只有在使用第一种方法时才能从mydomain.com访问anotherDomain.com上的“通用”文件(使用相对寻址)。

我被告知有一个我可以编写的脚本,因此anotherDomain.com可以使用相对寻址访问mydomain.com处的“root”文件,但是他们无法告诉我如何操作。我环顾网络,虽然有很多类似的问题,但我找不到怎么做。

只是为了重申问题:我希望能够访问mydomain.com中的文件,就像访问anotherDomain.com时的情况一样:mydomain.com/anotherDomain.com,访问时如下: anotherDomain.mydomain.comanotherDomain.com

示例: 如果我使用网址anotherDomain.com访问mydomain.com/anotherDomain.com,则可以index.html anotherDomain.com访问<img src='../imgs/generic.jpg'/>

imgs

访问mydomain.com anotherDomain.mydomain.com文件夹中的“通用”图片。很遗憾,当我使用以下网址访问此页面时:anotherDomain.com或{{1}},这不起作用。

4 个答案:

答案 0 :(得分:3)

首先,我假设您无法访问服务器的配置文件,因此必须处理.htaccess的受限可能性。如果您拥有访问权限,那么可以采用更好的方法来处理此问题。

我建议绕过这个问题。看看其他答案和评论。你去了一个非常复杂的设置。你可能会这样做,但从长远来看,这将是一个痛苦的屁股。

我会详细说明并在我的回答中解释一些事情。

据我所知,您的服务器上有以下文件结构:

public_html/
|
+-- index.html           // the index of mydomain.com
|
+-- imgs/
|   |
|   +-- generic.jpg
|
+-- anotherDomain.com/
    |
    +-- index.html       // index of anotherDomain.com

假设您浏览http://anotherDomain.com/。 当浏览器尝试加载generic.jpg时,它会创建此网址:http://anotherDomain.com/../imgs/generic.jpg。但是,几乎每个浏览器都会将其重写为http://anotherDomain.com/imgs/generic.jpg

所以你必须告诉服务器如何服务这个文件。

  • 您可以像@anubhava建议的那样创建规则。如果您访问http://anotherDomain.com/imgs/*,请将其重定向到虚拟主机imgs上的http://mydomain.com/目录。这样,内容就会显示属于mydomain.com

  • 如果您有可能,我建议您创建一个符号链接。

    |
    +-- anotherDomain.com/
        |
        +-- index.html       // index of anotherDomain.com
        |
        +-- imgs --> ../imgs/
    

    这样您就可以轻松访问所有图像。但是,它们将显示为anotherDomain.com的内容。这可以看作是优点,或者已经提到的缺点(搜索引擎)。如果你的提供者不通过它的接口支持它,有时也可以使用PHP(symlink函数)来创建符号链接。

答案 1 :(得分:2)

在浪费时间尝试使用.htaccess文件执行此操作后,我终于找到了一种方法,可以在普通的html中进行操作。在标题中,在所有其他链接之前,输入:

<base href="http://mydomain.com/anotherDomain.com" />

就是这样。将其删除以便在本地计算机上进行开发。 ;-)
请记住be a bit careful when using the base tag

修改 我发现这会导致其他问题。例如,相对链接转到http://mydomain.com/anotherDomain.com,而不是http://anotherDomain.com.htaccess代码添加到http://mydomain.com根目录,如:

RedirectMatch /anotherDomain.com(/)?$ http://anotherDomain.com

解决了这个问题,但引入了其他问题。还在寻找这个问题的好答案......有人吗?

答案 2 :(得分:1)

public_html/anotherDomain.com/.htaccess

中试用此代码
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# for images only
RewriteCond %{HTTP_HOST} ^(www\.)?anotherDomain\.com$ [NC]
RewriteRule ^(imgs/.+)$ http://mydomain.com/anotherDomain.com/$1 [L,NC,R]

# or for all files
RewriteCond %{HTTP_HOST} ^(www\.)?anotherDomain\.com$ [NC]
RewriteRule ^(.*)$ http://mydomain.com/anotherDomain.com/$1 [L,NC,R]

删除(或注释掉)您的<base...代码。

答案 3 :(得分:0)

通过几个不同的域访问相同的内容可能不是一个好主意。这可以使您的内容看起来像搜索引擎中的重复内容。如果您坚持这一想法,至少应该尝试使用canonical url元标记或属性注册所有内容。

现在我通常喜欢相对网址,因为使用域名预先填写url会使代理更难以重用(但是当使用ajax的东西时,相对url是不够的,你总是以一些绝对的url结尾有一些地方)。但是在这里你使用'../imgs/generic.jpg'的相对网址。这意味着这个url更多地指的是你将文件放在服务器上的方式而不是有意义的方式。它可能在单个域上有意义,但在域之间共享它不是。如果有一天你需要将新域文件和目录root移动到另一个地方(在另一台服务器上?),该怎么办?来自用户(和机器人和搜索引擎)的域名不相关。如果通过subdomain.mydomain.com/foo.jpgsubdomain.com/foo.jpg询问,您不拥有的任何代理都会多次请求资产,因此尝试从您的域中分享这些内容对于网络的其余部分没有意义,它是只是为了你自己的管理,在你身边。因此,请随意管理。

您最好以网址对您有所帮助的方式管理您的网址,例如'/common/imgs/generic.jpg''/site/imgs/custom.jpg'。然后在服务器端的虚拟主机域上,您可以处理映射url->directory & files。可以通过AliasAliasMatch以及mod_rewrite指令设置此映射。

例如一个简单的

Alias /common /path/to/mydomain/assets

允许您映射包含此指令的Virtualhost上的所有mydomain.com资产。在您决定移动网络服务器上的所有内容的那一天,您只需要重新编写apache重写和别名,而不是所有代码网址管理。