mod_rewrite 添加和切换目录

mod_rewrite 添加和切换目录

如何首先使用 mod_rewrite 更改 url 模式

domain.de/images/myfile.jpg

domain.de/directory/images/myfile.jpg

最后

domain.de/images/directory/myfile.jpg

我目前的规则

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.de$
RewriteCond %{REQUEST_URI} !^\/directory
RewriteRule ^(.*)$                                              directory/$1 [NC]


RewriteCond %{REQUEST_URI} ^\/directory\/images
RewriteRule ^\/directory\/images\/(.*)$                       images/directory/$1 [qsappend,L]

第一部分工作正常,但目录交换失败

答案1

处理完第二条重写规则后,第一条重写规则陷入了无限循环。为了中断,我不得不更改第一条规则以检查“目录”是否是 URL 的一部分,如下所示:

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.de$
RewriteCond %{REQUEST_URI} !\/directory\/
RewriteRule ^(.*)$                                              directory/$1 [NC]

答案2

你有没有尝试过:

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.de$
RewriteCond %{REQUEST_URI} !^/directory/
RewriteRule ^(.*)$                                              directory/$1 [NC]

注意 RHS 是!^/directory/带有锚点的^

(HTTP_HOST 检查真的有必要吗?你不能把它放在VirtualHost部分中吗domain.de?)

第二次重写只需要:

RewriteRule ^/(directory)/(images)/(.*) /$2/$1/$3 [QSA,L]

我认为您不需要RewriteCond此子句中的;如果 URI 不以 /directory/images 开头,则规则将不匹配,因此是RewriteCond多余的。

相关内容