将外部域和子目录指向站点的文件夹

时间:2012-04-09 12:47:30

标签: linux apache .htaccess

我们网站上的很多网页都使用旧的子域名来处理图片,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

我知道这可能只是我不是服务员。非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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