代码之家  ›  专栏  ›  技术社区  ›  MiffTheFox

mod_rewrite忽略[l]

  •  0
  • MiffTheFox  · 技术社区  · 16 年前

    我想重写这个

    http://localhost/.../identicon/f528764d624db129b32c21fbca0cb8d6.png
    

    http://localhost/.../identicon.php?hash=f528764d624db129b32c21fbca0cb8d6
    

    所以我添加到了/../.htaccess,这就是它:

    RewriteEngine On
    RewriteRule ^resource/ - [L]
    RewriteRule ^identicon/(.+)\.png$ identicon.php?hash=$1 [QSA,L]
    RewriteRule ^(.*)$ index.php?t=$1 [QSA,L]
    

    由于某些原因,它无法将其重定向到index.php?t=identicon.php;即使设置了L标志!为什么?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Gumbo    16 年前

    向最后一条规则添加条件以排除可以映射到现有文件的请求:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?t=$1 [QSA,L]
    

    这是必要的,因为 L flag 以新URL作为请求URL生成内部重定向:

    但是,请记住,如果 RewriteRule 生成一个内部重定向(在每个目录上下文中重写时经常发生),这将重新拒绝请求并导致从第一个开始重复处理 重写规则 .

        2
  •  0
  •   Matchu    16 年前

    (回答不正确;留待参考)


    我只是想知道可能是什么问题-这件事让我很长一段时间受挫。

    根据您的服务器设置,它很可能正在解释 identicon/xxx.png 作为请求 identicon.php/xxx.png ,假设php扩展是您想要的。试着去 /index 而不是 /index.php -如果它加载了php文件,这就是影响您的问题。

    这是多视图apache选项,很愚蠢,但必须特别启用它。进入您的站点配置文件,查看其启用位置,然后将其删除。

    如果您不能完全控制服务器配置,则以下操作可能在.htaccess中工作(具有讽刺意味的是,这取决于您的服务器配置)。

    Options -Multiviews
    
    推荐文章