2

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

4

2 回答 2

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。

于 2012-12-10T10:18:23.697 回答
1

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

RewriteRule ^i/(.+)$ /image.php?id=$1 [L,NC,QSA]
于 2012-12-10T10:16:27.433 回答