2010-01-19 143 views
0

我希望能够改写这个的mod_rewrite忽略[L]

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标志被设置!为什么?

+0

它以什么方式不起作用? – Matchu 2010-01-19 03:33:28

+0

@Matchu现在添加,它重定向到index.php而不是identicon.php。 – MiffTheFox 2010-01-19 03:36:30

回答

2

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

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

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

但是请记住,如果RewriteRule生成内部重定向(其在每个目录上下文重写时经常发生),这将重新注入的再任务,并会导致处理从第一个RewriteRule开始重复。

0

(不正确的答案;左为参考)


我只是想出什么可能是问题 - 它的东西,我挫败了很久。

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

这是MultiViews Apache选项,它很愚蠢,但它必须特别启用。进入您的站点配置文件并查看它的启用位置,并将其删除。

如果您没有完全控制您的服务器配置,则以下内容可能在.htaccess中工作(具体取决于您的服务器配置)。

Options -Multiviews 
+0

我让index.php将$ _GET ['t']的值转储到屏幕上:'index/a.png'打印'index/a.png',但'identicon/a.php'只是转储'identicon。 php'。另外,我尝试将RewriteRule中的“identicon”更改为其他内容,但仍然失败。 – MiffTheFox 2010-01-19 04:03:26

+0

并且不,MultiViews未启用。 – MiffTheFox 2010-01-19 04:19:06