0

是的,原谅我的愚蠢,我在 t'interweb 上查看了大量示例,但我认为我没有找到我想要的东西。

我有一个网站,photography.example.com是主站点,但我也希望有另一个子域来提供静态文件,例如static.photography.example.com.

如果我请求一个文件(例如http://static.photography.example.com/js/jquery.js),我希望从非静态域中检索该文件,从而使我的文件结构保持完全不变,但使用多个域来允许更多并发 http 请求。

我不想抛出任何会使浏览器移动文件的http响应,我只想将文件从普通域镜像到静态域。在此之后,我将继续设置远期过期以改善缓存等。

我如何使用 实现这一目标.htaccess

编辑 1

所以经过一番折腾,我想出了这个:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)$ http://photography.example.com/$1 [L]

但这实际上重定向到我正在尝试读取的域,我希望它在静态域名下提供文件,任何有关修改此脚本的帮助将不胜感激。

编辑 2

所以我修改了我的 DNS 并等了几天让它传播,但 CNAME 技术也不起作用。这是条目:

替代文字

4

3 回答 3

2

在你的问题中,你在谈论:

  1. 添加过期标头以进行缓存
  2. 跨域拆分资源

对于第 1 项,您可以在您的主域上编辑您的 httpd.conf/.htaccess 文件(在您的整个网站上这样做并没有什么坏处,不是吗?)

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType application/x-javascript A2592000
  ExpiresByType image/gif A2592000
  ExpiresByType image/jpeg A2592000
  ExpiresByType image/png A2592000
</IfModule> 

项目 #2 不需要任何 Apache 配置 - 只需使用CNAME Photography.example.com配置您的 static.photography.example.com DNS 条目。这应该够了吧。

或者您可以编辑您的 httpd.conf 并添加一个 ServerAlias

<VirtualHost xx.xxx.xxx.xx:80> 
DocumentRoot / 
ServerName photography.example.com 
ServerAlias static.photography.example.com 
</VirtualHost> 

因此,目前,您不需要具有专用 Apache 配置的单独虚拟主机。

以下是您想要一个单独的域和具有专用配置的单独虚拟主机的其他一些原因:

如果您想要其中一个,或者您的缓存需求太复杂(您不想缓存所有 JS/CSS/图像,而是缓存其中的一个子集),那么您唯一的解决方案是:掌握您的 httpd .conf 并为每个域编写单独的配置

于 2010-09-24T09:37:18.393 回答
1

我对这个问题的理解是重定向

http://static.photography.example.com/js/jquery.js

从以下地址获取文件(不更改浏览器上的 URL):

http://photography.example.com/js/jquery.js

但是将所有现有文件的 URL 保留为NOT REDIRECTED

http://static.photography.example.com/images.jpg

如果这是真的,那么这.htaccess应该工作:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)?.photography.example.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://photography.example.com/$1 [P]

此外,如果您有复杂的规则,您还可以使用MAPPING ,例如:

RewriteRule ^/file1\.js$ http://photography.example.com/file.js?q=444 [P]
RewriteRule ^/file2\.js$ http://photography.example.com/file.js?q=345 [P]
RewriteRule ^/file3\.js$ http://photography.example.com/file.js?q=999 [P]

map.txt在文件夹中创建一个文本文档(例如).htaccess并放入以下内容:

file1   444
file2   345
file3   999

.htaccess具有以下外观:

# Set a variable ("map") to access map.txt from config
RewriteMap map txt:map.txt

# Use tolower function to convert string to lowercase
RewriteMap lower int:tolower

# Get requested file name
RewriteCond %{REQUEST_URI} ^/([^/.]+)\.js$ [NC]

# Seek file name in map-file
RewriteCond ${map:${lower:%1}|NOT_FOUND} !NOT_FOUND

# Perform rewriting if the record was found in map-file
RewriteRule .? http://photography.example.com/file.js?q=${map:${lower:%1}} [P]
于 2015-04-04T17:49:15.937 回答
0

我认为您需要 CNAME 记录才能将 static.photography.example.com 的请求传递给您的服务器,并且 .htaccess 以特殊方式解析 static.photography.example.com 的请求。

将以下重写规则添加到 .htaccess 应该可以解决问题

RewriteCond %{HTTP_HOST} !^(www\.)?photography.example.com$ [NC]

于 2010-10-01T12:47:51.823 回答