2012-12-10 233 views
2

我的网址: http://www.mywebsite.com/i/1Q2GmFuFdZ.jpghtaccess的重写规则

我想重写规则,使得它进入文件​​

在我的PHP文件,我有这个

<?PHP 
print_r($_GET); 
?> 

这是我在我的htaccess

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

这是我得到的输出:

Array ([id] => image.php) 

我不知道我在做什么错。我不是正则表达式专业人士,但我知道基本知识。

感谢

编辑: 忘了在表达

回答

3

mod_rewrite规则以递归方式应用。下面是当你要求1Q2GmFuFdZ.jpg会发生什么:

  • 1Q2GmFuFdZ.jpg的模式相匹配,成为​​
  • 由于文件名发生了变化,另一次迭代与重新编写URL
  • image.php执行图案匹配well并改写为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。

+0

完美运作 – Ben

1

你重写规则是错误的添加0-9。它应该是这样的:

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

我认为它仍然会产生相同的结果(虽然未验证)。 –

+0

@SalmanA:请验证然后:) – anubhava

+2

嗯,它实际上工作。 –