.htaccess图像处理问题

时间:2017-09-27 10:57:37

标签: .htaccess mod-rewrite

我试图重定向:

  1. index.php的所有页面(这都有效)。

  2. /products/large/12345.jpg/classes/watermark/handler.php?size=large&photo=12345.jpg(事实并非如此)。

  3. ### OPTIONS ###
    Options +FollowSymLinks -Indexes -MultiViews
    AddDefaultCharset UTF-8
    
    ### REWRITE ###
    RewriteEngine On
    RewriteBase /
    
    ### CONDITIONS ###
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    ### RULES ###
    RewriteRule ^([^?]*)$ /index.php?path=$1 [NC,QSA]
    RewriteRule ^/products/(.*)/(.*)$ /classes/watermark/handler.php?size=$1&photo=$2
    

    问题是apache返回内部重定向错误。

1 个答案:

答案 0 :(得分:0)

您的指令顺序错误。您需要先具备更具体的规则。就像你说的,你是重写"所有页面都是index.php"。如果您已写入index.php,那么您希望如何重写/products/....

但是,您的RewriteRule 模式中也有错误。在.htaccess中,匹配的URL路径不以斜杠开头。所以,无论如何,这永远不会匹配。

另请注意,RewriteCond指令仅适用于后面的第一个RewriteRuleRewriteCondRewriteRule指令一起形成一个"规则"。你不应该将条件RewriteRule指令分开,它们可以一起工作(并且可以相互交谈)。

尝试这样的事情:

# Rewrite images
RewriteRule ^products/(.*)/(.*)$ /classes/watermark/handler.php?size=$1&photo=$2 [L]

# Rewrite all other pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [QSA,L]

注意我还添加了Llast)标记,以防止处理以下指令。

不确定为什么你的模式有[^?]*?查询字符串与RewriteRule 模式不匹配。因此,这可以简化为.*(如上所述)。

根据您的网址结构,您可能还需要确认是否正在请求图片?即。请求以.jpg结尾的网址?而不是/products/large/<something>之类的东西。您还可以验证&#34;尺寸&#34;即。 (small|medium|large)

  

问题是apache返回内部重定向错误。

好吧,我无法看到您发布的代码中会发生什么? (如上所述,在您发布的代码中,该附加指令不会做任何事情。)