6

以下是我的目录结构:

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.png将与http://www.example.com/images/example.png相同

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


解决方案

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

2 回答 2

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/)。这就是为什么总是应用第二条规则以及为什么示例中的两个条件行几乎总是在重写期间使用的第一个条件行的原因。

于 2012-06-30T12:31:02.993 回答
4

更改规则如下:

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

并将您的 .htaccess 放在文档根目录中,或者放在“/admin”父文件夹中。

于 2012-06-30T11:18:20.483 回答