HTACCESS如何mod_rewrite网站资产文件路径?

时间:2013-06-19 08:02:47

标签: apache .htaccess mod-rewrite

使用Apache,如何使URL(简称图像路径)实际来自其他位置。例如,我有一个html页面,其网址如下:

apple.html,里面有原始代码:

<img src="http://www.myoldsite.com/assets/image/apple.jpg" />
<img src="http://www.myoldsite.com/assets/image/orange.jpg" />

但实际上我希望将此路径重写为:

<img src="http://www.mynewsite.com/image/apple.jpg" />
<img src="http://www.mynewsite.com/image/orange.jpg" />

因此,当我访问apple.html页面时,图像应该来自新位置,而无需更改每个文件中的实际代码。

但实际上我对.htaccess规则完全不满意。当我像下面这样使用时,它显示错误:

RewriteEngine On
RewriteRule http://www.mynewsite.com/image/(.*) /assets/image/$1 [QSA, L]

我有这样的数千页,但我完全坚持.htaccess规则 我错过了什么?请帮忙。

2 个答案:

答案 0 :(得分:0)

我假设两个域都指向同一个apache实例?

您似乎已切换RewriteRule的参数。语法是:

RewriteRule UrlsMatchingThis ChangeToThis [params]

所以在你的情况下我会做这样的事情:

RewriteRule ^/assets/image/(.*) http://www.mynewsite.com/image/$1  [R,NC,L]

这匹配tld之后的部分是/ assets / image /(任何东西)的所有请求。 我用过的旗帜是

R redirect
NC Ignore case
L Last rewrite rule for this request

您可能需要向RewriteRule添加条件,如下所示:

RewriteCond %{SERVER_NAME} ^(www\.)?myoldsite\.com$                [NC]
RewriteRule ^/assets/image/(.*) http://www.mynewsite.com/image/$1  [R,NC,L]

如果域名为myoldsite.com,只有或不包含www,这只会重写您的请求。

Se http://httpd.apache.org/docs/current/mod/mod_rewrite.html以获取重写模块的文档。

答案 1 :(得分:0)

通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在.htaccess目录下的DOCUMENT_ROOT中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^(image/.+)$ /assets/$1 [NC,L]