0

我们网站中的很多页面都使用旧的子域来存储图像、css 和 javascript 文件。我从新手开发人员那里继承了这个项目,他们没有使用任何通用的设计模板。结果是数百页具有对内容的静态引用,示例如下:

http://static.foo.bar/css/sample.css
http://static.foo.bar/brochure/css/sample.css
http://static.foo.bar/company/newsletter/js/common.js
http://static.foo.bar/images/version2/header.jpg

...以及数百个其他地点。我需要将它们全部指向主域而不是子域,而无需在 .htaccess 文件中为每个域创建规则。所以:

http://static.foo.bar/css/sample.css 
should point to: 
http://www.foo.bar/css/sample.css

http://static.foo.bar/brochure/css/sample.css
should point to: 
http://www.foo.bar/brochure/css/sample.css

http://static.foo.bar/company/newsletter/js/common.js
should point to: 
http://www.foo.bar/company/newsletter/js/common.js

http://static.foo.bar/images/version2/header.jpg
should point to: 
http://www.foo.bar/images/version2/header.jpg

我知道这是可能的,只是我不是服务员。任何帮助将不胜感激。

4

1 回答 1

0

.htaccess在文档根目录中创建一个包含以下内容的文件:

将此添加到您的服务器配置中,%{HTTP_HOST}检查不起作用.htaccess

<IfModule mod_rewrite.c>
# bad matching: RewriteCond %{HTTP_HOST}   !^static\.foo\.bar [NC]
#
# correction, matching everything other than www.foo.bar :
RewriteCond %{HTTP_HOST}   !^www\.foo\.bar$ [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www.foo.bar/$1 [L,R]
</IfModule>

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html#url

更新:再给它一秒钟,如果它托管在同一台服务器上,只需添加

ServerAlias static.foo.bar

到 www.foo.bar 配置也可以提供静态内容。

更新 #2 基于反馈:

这应该在 .htaccess 文件中工作(在我的电脑上工作),这会将所有请求重定向static.foo.bar/*www.foo.bar/*

RewriteCond %{HTTP_HOST}    ^static\.foo\.bar [NC]
RewriteRule ^(.*)$          http://www.foo.bar/$1 [R,L]

不,ServerAlias 命令仅适用于 VirtualHost 配置:

http://httpd.apache.org/docs/2.2/mod/core.html#serveralias

于 2012-04-09T13:13:24.837 回答