Apache 如何在htaccess中使用多个重写规则?

Apache 如何在htaccess中使用多个重写规则?,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我在htaccess中使用了2条重写规则规则 RewriteEngine on RewriteBase / # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #if it has member/photo/render_fast forward to photo_render.php RewriteRu

我在htaccess中使用了2条重写规则规则

RewriteEngine on
RewriteBase /
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#if it has member/photo/render_fast forward to photo_render.php
RewriteRule ^member/photo/render_fast(.*) /photo_render.php?r=$1 [L]
# otherwise forward it to index.php
RewriteRule . index.php [L]
但是这不起作用,当我在本地机器上尝试时,我的Apache总是使用第二条规则,而在宿主服务器上,Apache总是显示一个错误


我做错了什么?

发生的事情是第二次(在URI被重写为
/photo\u render.php
之后),第二条规则被应用,因此
/photo\u render.php
被重写为
index.php
。当您尝试匹配类似
*
的内容时,需要添加一些条件。这应该起作用:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^member/photo/render_fast(.*) /photo_render.php?r=$1 [L]
# otherwise forward it to index.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

请注意,如果出于某种原因您没有photo_render.php,此操作也会失败。

您的第一条规则是:如果URL以
member/photo/render_fast
开头,并且请求的资源不是文件也不是文件夹,则将其转发到
/photo_render.php
。第二条规则是:将所有内容重定向到
/index.php