如何首先使用 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
多余的。