【问题标题】:Rewrite Query String重写查询字符串
【发布时间】:2011-02-01 06:39:37
【问题描述】:

我正在尝试编写一些 mod_rewrite 规则来即时生成缩略图。 所以当这个网址

example.com/media/myphoto.jpg?width=100&height=100

脚本应将其重写为

example.com/media/myphoto-100x100.jpg

如果文件存在于磁盘上,则由 Apache 提供服务,如果不存在,则调用脚本来生成文件。

这是我写的

RewriteCond %{QUERY_STRING}                              ^width=(\d+)&height=(\d+)
RewriteRule ^media/([a-zA-Z0-9_\-]+)\.([a-zA-Z0-9]+)$    media/$1-%1x%2.$2   [L]
RewriteCond %{QUERY_STRING}                              ^(.+)?
RewriteRule ^media/([a-zA-Z0-9_\-\._]+)$                 media/index.php?file=$1&%1 [L]

我得到了无限的内部重定向。 第一个条件匹配,规则被执行,然后我得到一个内部重定向。

我需要建议来完成这个脚本。

谢谢。

【问题讨论】:

    标签: regex mod-rewrite thumbnails


    【解决方案1】:

    试试这些规则:

    RewriteCond %{QUERY_STRING} ^width=(\d+)&height=(\d+)$
    RewriteCond %{DOCUMENT_ROOT}/media/$1-%1x%2.$2 -f
    RewriteRule ^media/([a-zA-Z0-9_\-]+)\.([a-zA-Z0-9]+)$ media/$1-%1x%2.$2 [L]
    RewriteCond $1 !=index.php
    RewriteRule ^media/([a-zA-Z0-9_\-]+\.[a-zA-Z0-9]+)$ media/index.php?file=$1 [L,QSA]
    

    第一条规则的第二个条件测试是否存在同名的文件 (-f)。

    【讨论】:

    • 即使 uri 被重写并且匹配,每次重定向都会运行此条件:RewriteCond: input='width=100&height=100' pattern='^width=(\d+)&height=(\ d+)' => 匹配
    【解决方案2】:

    尝试将其用于您的第二种情况:

    RewriteCond %{REQUEST_FILENAME} !-f
    

    '-f'(是常规文件) 将 TestString 视为路径名并测试它是否存在并且是常规文件。

    RewriteCond

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 2011-04-07
      • 2010-11-16
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多