没有用户知道的htaccess重定向

时间:2012-03-30 17:21:46

标签: php apache .htaccess

我们通过相同的代码运行多个域,我们希望将其图像保存在各自的文件夹中。这就是我们正在做的事情。

/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]

但我的问题是,

  1. 以上重定向不断循环
  2. 我可以在没有用户或管理员怀疑的情况下实现img效果吗?
  3. 此致

    Khuram

2 个答案:

答案 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。