【问题标题】:Redirect everything except images重定向除图像以外的所有内容
【发布时间】:2013-08-31 01:34:31
【问题描述】:

我不明白为什么,但是:

RewriteCond %{HTTP_HOST} market\.mysite\.com$ [NC]
RewriteCond %{HTTP_HOST} !^market\.mysite\.com$ [NC]
RewriteCond %{REQUEST_URI} \.(png|jpe?g|bmp|gif|swf|css|js)$ [NC]
RewriteRule ^(.*) http://market.mysite.com/$1 [L,R]

RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

按预期工作。将图像重定向到其他域。但是这个:

RewriteCond %{HTTP_HOST} market\.mysite\.com$ [NC]
RewriteCond %{HTTP_HOST} !^market\.mysite\.com$ [NC]
RewriteCond %{REQUEST_URI} !\.(png|jpe?g|bmp|gif|swf|css|js)$ [NC]
RewriteRule ^(.*) http://market.mysite.com/$1 [L,R]

RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

无论如何都会重定向。我想看到的是重定向除图像之外的所有内容。 我在上面的规则中尝试做的是将market.mysite.com 的所有子域重定向到market.mysite.com,如果它不是market.mysite.com 并且不是图像。换句话说:

cdn.market.mysite.com -> market.mysite.com

cdn.market.mysite.com/blahblah.html -> market.mysite.com/blahblah.html

cdn.market.mysite.com/blahblah.png -> NO REDIRECT

market.mysite.com -> NO REDIRECT

我使用通配符子域,因此我所有的市场子子域都将使用相同的目录。然后通过一个 php 文件响应所有请求。 index.php

谢谢,

【问题讨论】:

  • 如果我将该 4 行规则添加到空白 htaccess 文件中,! 排除条件对我来说效果很好。以这些扩展名之一结尾的任何内容都不会被重定向
  • 你的问题解决了吗?
  • 还没有。我仍然无法让它工作。
  • 示例网站是:store.irgservers.com/test.png

标签: regex apache .htaccess mod-rewrite


【解决方案1】:

用这个替换你现有的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On

RewriteCond %{HTTP_HOST} ^[^.]+\.market\.mysite\.com$ [NC]
RewriteCond %{THE_REQUEST} !^[A-Z]{3,}\s/+.+?\.(png|jpe?g|bmp|gif|swf|css|js)[\s?] [NC]
RewriteRule ^ http://market.mysite.com%{REQUEST_URI} [L,R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

在其他浏览器中测试或清除现有浏览器缓存。

【讨论】:

  • 感谢您的回复。但它仍然会重定向图像以及其他页面。
  • 根据我的测试,它没有重定向图像。您的 .htaccess 中还有其他内容吗?您的 DOCUMENT_ROOT 中是否还有其他 .htaccess 文件?最后,这里有没有控制这种行为的框架?
  • 我对您的代码所做的唯一更改是删除“选项”行。因为它会产生错误#500。我正在使用 Apache 2.2.3。也没有其他 htaccess 也没有框架。要我给你网站地址吗?
  • 不客气,很高兴它解决了问题。诀窍是使用:%{THE_REQUEST}(这是 Apache 收到的原始请求,不会被各种规则覆盖)。
  • 我添加了另一个赏金(+100rep),只要堆栈溢出允许我这样做,我就会给它。我知道这与您的时间真正价值还相差甚远。对不起,
猜你喜欢
  • 2013-09-23
  • 2012-09-05
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
相关资源
最近更新 更多