使用mod_rewrite从一个目录重定向到另一个目录

inv*_*sal 6 .htaccess mod-rewrite

以下是我的目录结构:

admin\
controls\
images\
media\
lib\
models\
views\
index.php
.htaccess
Run Code Online (Sandbox Code Playgroud)

以下是我的.htaccess

RewriteEngine On 
RewriteRule /admin/images/(.*) /images/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
Run Code Online (Sandbox Code Playgroud)

我希望/ admin/images中的所有内容都等于根目录中的/ images.例如:http://www.example.com/admin/images/example.pnghttp://www.example.com/images/example.png相同

我的.htaccess问题是: 它转到index.php而不是将管理员/图像镜像到images /


RewriteEngine On 
RewriteRule /admin/images/(.*) /images/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
Run Code Online (Sandbox Code Playgroud)

bre*_*nac 10

您需要指定图像重写规则是行中的最后一个规则,以防止进一步重写.为此,您只需[L]在图像重写规则的末尾指定.

RewriteEngine On 
RewriteRule /admin/images/(.*) /images/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
Run Code Online (Sandbox Code Playgroud)

编辑:这是解释问题发生的原因(摘自评论部分以提供说明).

%{REQUEST_FILENAME}无论执行多少重写阶段,您都会看到原始内容永远不会改变.这意味着当达到第二个规则时,该变量实际上仍将指向现有图像(其中/admin/images/),而不是指向正在重写和不存在的图像(/images/).这就是为什么第二条规则将始终应用以及为什么示例中的两条条件线几乎总是第一条在重写期间使用的原因.