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

时间:2012-06-30 11:12:08

标签: .htaccess mod-rewrite

以下是我的目录结构:

admin\
controls\
images\
media\
lib\
models\
views\
index.php
.htaccess

以下是我的.htaccess

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

我希望/ 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

2 个答案:

答案 0 :(得分:10)

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

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

编辑:以下是对问题发生原因的解释(摘自评论部分)。

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

答案 1 :(得分:4)

更改规则如下:

RewriteEngine On 
RewriteRule ^admin/images/(.*) images/$1

将.htaccess放入文档根目录,或者放在'/ admin'父文件夹中。