我有一个域名:
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.com
或anotherDomain.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}},这不起作用。
答案 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.jpg
和subdomain.com/foo.jpg
询问,您不拥有的任何代理都会多次请求资产,因此尝试从您的域中分享这些内容对于网络的其余部分没有意义,它是只是为了你自己的管理,在你身边。因此,请随意管理。
您最好以网址对您有所帮助的方式管理您的网址,例如'/common/imgs/generic.jpg'
和'/site/imgs/custom.jpg'
。然后在服务器端的虚拟主机域上,您可以处理映射url->directory & files
。可以通过Alias
,AliasMatch
以及mod_rewrite
指令设置此映射。
例如一个简单的
Alias /common /path/to/mydomain/assets
允许您映射包含此指令的Virtualhost上的所有mydomain.com资产。在您决定移动网络服务器上的所有内容的那一天,您只需要重新编写apache重写和别名,而不是所有代码网址管理。