图像网址的htaccess重写规则

时间:2012-12-10 10:07:16

标签: php regex apache .htaccess mod-rewrite

我有网址: 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

2 个答案:

答案 0 :(得分:3)

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。

答案 1 :(得分:1)

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

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