这是我为我的高性能框架所做的其中一件事情(请参阅我的简历)。
我给你一个高级的 RewriteRule,我很确定你会有足够的材料来完成:
创建静态域:
static.example1.com
static.example2.com
static.example3.com
你所有的图片都在哪里。
从现在开始,不再有:
www.example1.com/images/www.example1.com/picture.jpg
www.example2.com/images/www.example2.com/picture.jpg
www.example3.com/images/www.example3.com/picture.jpg
但是
static.example1.com/picture.jpg
static.example2.com/picture.jpg
static.example3.com/picture.jpg
不错的网址,嗯?
现在创建一个包含所有静态文件的虚拟主机:
<VirtualHost *>
ServerName static.example1.com
ServerAlias static.example2.com static.example3.com
</VirtualHost>
将您的文档根目录设置为没有虚拟主机名的基础,因此在您的情况下:
DocumentRoot "/public_html/images"
并添加这个 RewriteRule
RewriteCond %{HTTP_HOST} ^static\.([a-zA-Z0-9\-]+)\.com$
# Change the path, and add the request:
RewriteRule (.*) %{DOCUMENT_ROOT}/static.%1.com$1 [QSA,L]
总而言之:
<VirtualHost *>
ServerName static.example1.com
ServerAlias static.example2.com static.example3.com
RewriteCond %{HTTP_HOST} ^static\.([a-zA-Z0-9\-]+)\.com$
# Change the path, and add the request:
RewriteRule (.*) %{DOCUMENT_ROOT}/static.%1.com$1 [QSA,L]
</VirtualHost>
好吧,这并不能完全回答你的问题,所以这是简短的答案,但我不喜欢它,因为它不能帮助你做得非常(非常)好:
RewriteCond %{HTTP_HOST} ^www\.(example1|example2|example3)\.com$
# Change the path:
RewriteRule (.*)(\.(css|js|txt|htc|pdf|jpg|jpeg|gif|png|ico))$ %{DOCUMENT_ROOT}/www.%1.com$1$2 [QSA,L]
如果这还不够:
两个提示:
如果您不是在托管环境中(= 如果它是您自己的服务器并且您可以修改虚拟主机,不仅是.htaccess 文件),尝试使用RewriteLog 指令:它可以帮助您追踪此类问题:
# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On
我最喜欢的检查正则表达式的工具:
http://www.quanetic.com/Regex(别忘了选择 ereg(POSIX) 而不是 preg(PCRE)!)