允许从子域访问

时间:2014-08-23 15:55:51

标签: apache .htaccess

我在我的主网站的子域上制作了我的网站的新版本。我的主网站的网址为http://chirotremelo.be,我的子网域为http://v2.chirotremelo.be。我的服务器设置是public_html文件夹,位于“旧”字样中。网站的版本,以及带图像的文件夹。此文件夹中还有一个v2文件夹,其中包含我的新版本,该版本也使用标准网站中的图像。

我在本地计算机上开发新版本,在主站点内也有v2文件夹。这样做我可以轻松更新它。

现在,由于我的v2加载了v2版本以及主网站版本中的资源,因此我将<base>设置为http://chirotremelo.be/。要包含v2文件夹中的文件,我只需在特定网址前添加v2/

在本地,这很好用,但在我的实时版本中,它似乎不会加载例如http://chirotremelo.be/v2/newSite.css。显示的错误是:

Imported resource from origin 'http://chirotremelo.be' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://v2.chirotremelo.be' is therefore not allowed access.

我已经四处寻找,但似乎无法立即找到任何解决方案。我认为它可能与我的.htaccess文件有关,因此它包括在内:

php_value date.timezone Europe/Brussels

<FilesMatch ".php$">
AddHandler x-httpd-php54 .php
</FilesMatch>

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?chirotremelo\.be/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F]

RewriteCond %{HTTP_HOST}  ^www.chirotremelo.be [nocase]
RewriteRule ^(.*)         http://chirotremelo.be/ [last,redirect=301]

我知道这可能不会很多,但我以前从未使用过子域名。我已成功使用http://v2.chirotremelo.be/newSite.css,但需要使用非子域的基础来加载仅在主站点上可用的内容。

1 个答案:

答案 0 :(得分:2)

此问题称为跨源资源共享(简称CORS)。您将在此处找到许多问题,特别是对于异步JavaScript请求。

这是某种与浏览器相关的问题;服务器仍将提供所请求的文件,但浏览器阻止它以防止网站从“坏”网站加载“坏”内容。您需要发送带有服务器响应的CORS-Header以允许浏览器允许它。

在您的情况下(因为这不是生产网站),我会建议您使用以下解决方案:

您可以尝试添加

<IfModule mod_headers.c>
  Header add Access-Control-Allow-Origin "*"
</IfModule>

到您的.htaccess文件。 (注意,这需要启用Apache中的mod_headers,但我想这是默认启用的。)

这不是最佳解决方案,尤其是可能有更优雅的解决方案。但它适用于这种特殊情况(测试/测试网站)。