我们通过相同的代码运行多个域,我们希望将其图像保存在各自的文件夹中。这就是我们正在做的事情。
/images/www.domain1.com/logo.jpg /images/www.domain2.com/logo.jpg
现在,我想知道的是,在htaccess中我们可以在没有用户怀疑的情况下重写网址。这就是我想要的那个
<img src="/images/logo.jpg" />
应该在内部通过htaccess
RewriteRule ^images/(.*)$ /images/{HTTP_HOST}/$1 [L,R=301]
但我的问题是,
此致
Khuram
答案 0 :(得分:6)
删除R=301
只是重写而不是重定向:
RewriteRule ^images/(.*)$ /images/{HTTP_HOST}/$1 [L]
它不断循环的原因是301重定向导致为URL images/www.domain1.com/logo.jpg
创建新请求。该网址还与您的^images/(.*)$
规则相匹配,因此会无限制地再次重定向。
如果你真的想要进行301重定向(我怀疑你没有,但如果你这样做了),你可以通过添加一些重写条件来解决无限循环问题,如果已经包含域,则跳过重定向:< / p>
RewriteCond {REQUEST_URI} !^images/www.domain1.com/(.*)$
RewriteCond {REQUEST_URI} !^images/www.domain2.com/(.*)$
RewriteRule ^images/(.*)$ /images/{HTTP_HOST}/$1 [L,R=301]
答案 1 :(得分:1)
如果您不想在浏览器中更改URL,则绝对不应使用R
标志。但是,即使没有R
标记,您的RewriteRule也会无限循环,最终会得到internal server error
。像这样使用RewriteRule:
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^images/(.*)$ images/%{HTTP_HOST}/$1 [L,NC]
使用名为{ENV:REDIRECT_STATUS}
的特殊内部变量,一旦成功应用RewriteRule规则,该变量设置为200。