Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 使用mod_rewrite从一个目录重定向到另一个目录_.htaccess_Mod Rewrite - Fatal编程技术网

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

.htaccess 使用mod_rewrite从一个目录重定向到另一个目录,.htaccess,mod-rewrite,.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 . /inde

以下是我的目录结构:

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相同。例如:将与相同

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


解决方案

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

更改规则如下:

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

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

您需要指定图像重写规则是行中的最后一个,以防止进一步重写。为此,只需在图像重写规则的末尾指定
[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/
)。这就是为什么总是应用第二条规则,以及为什么示例中的两条条件行几乎总是重写过程中使用的第一条条件行。

它转到index.php,而不是将admin/images镜像到images/I尝试过,但没有成功。我把文件根目录和管理文件夹以及。无论如何,谢谢你回答我的问题+很奇怪。看一看。它在我的服务器上运行得很好。我在/test/admin/images中没有index.html,而在test/images中有一个。您的httpd.conf是否允许使用.htaccess?问题是我的其他重写规则会覆盖此重写规则。添加[L]可以简单地解决问题。我看到。。。但事实上我不明白为什么这些规则会凌驾于此。。。图像文件不应与重写条件匹配。我在那个文件夹里有你同样的.htaccess。。。只有当我请求一个不存在的文件时,它才会在index.php上重定向我。也许全息医生能给我解释一下完美的前面不需要
/
,我太笨了。我试过一次(也许我忘了节省时间,结果没用)。非常感谢你。它正在工作。对不起,我也想理解。重写条件表示,只有当请求的文件不是文件或目录时,才必须应用最后一条规则。。。图像不是一个文件吗(假设图像存在)?你是对的,但这些规则中隐藏着一个小把戏,这是造成混乱的原因:)你看到原始的
%{REQUEST_FILENAME}
将永远不会更改,无论执行了多少次重写。这意味着,当达到第二条规则时,该变量实际上仍将指向现有图像(位于
/admin/images/
中),而不是正在重写且不存在的图像(
/images/
)。这就是为什么第二条规则总是适用的原因,也是为什么示例中的两条条件行几乎总是重写时使用的第一条。感谢您的解释。:)+1@holodoc当前位置麻生太郎试图理解的另一个简短问题。如果%{REQUEST_FILENAME}指向一个现有的映像,那么第一个RewriteCond是否会失败(!-f),从而不会应用RewriteRule?