【问题标题】:htaccess rewrite rule for image url图片url的htaccess重写规则
【发布时间】:2012-11-27 17:39:42
【问题描述】:

我有网址: http://www.mywebsite.com/i/1Q2GmFuFdZ.jpg

我想重写一条规则,使其转到文件image.php?id=1Q2GmFuFdZ.jpg

在我的 PHP 文件中,我有这个

<?PHP
print_r($_GET);
?>

这就是我的 htaccess 中的内容

RewriteEngine On
RewriteRule ([a-zA-Z0-9]+[\.]+[a-z]{3})$ image.php?id=$1

这是我得到的输出:

Array ( [id] => image.php )

我不确定我做错了什么。我不是正则表达式专家,但我知道基础知识。

谢谢

编辑: 忘记在表达式中添加0-9

【问题讨论】:

    标签: php regex apache .htaccess mod-rewrite


    【解决方案1】:

    mod_rewrite 规则以递归方式应用。当您请求 1Q2GmFuFdZ.jpg 时会发生以下情况:

    • 1Q2GmFuFdZ.jpg 匹配模式,变为image.php?id=1Q2GmFuFdZ.jpg
    • 由于文件名已更改,使用重写的 URL 执行另一次迭代
    • image.php 也匹配模式并重写为image.php?id=image.php
    • 文件名或目录未更改,因此不再执行迭代
    • 最终结果:image.php?id=image.php

    解决方法:添加这条规则:

    RewriteEngine On
    RewriteRule image\.php$ - [L]
    RewriteRule ([a-zA-Z0-9]+\.[a-z]{3})$ image.php?id=$1
    

    第二条规则起到手刹的作用。您还需要调整规则 #3。

    【讨论】:

      【解决方案2】:

      您的重写规则是错误的。应该是这样的:

      RewriteRule ^i/(.+)$ /image.php?id=$1 [L,NC,QSA]
      

      【讨论】:

      • 我认为它仍然会产生相同的结果(虽然未验证)。
      猜你喜欢
      • 2011-12-06
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多