URL以/folder开头但不含指定子目录时的重定向配置求助
Apache URL重定向规则配置方案
你的需求完全可行,问题出在原来的规则匹配范围太广,导致路径重复拼接了。下面是修正后的通用规则:
# 筛选出以/folder/开头,但路径中不包含/folder/subfolder/的请求 RewriteCond %{REQUEST_URI} ^/folder/(?!subfolder/) # 提取/folder/之后的部分,重定向到目标路径 RewriteRule ^/folder/(.*)$ /folder/subfolder/$1 [R=301,L]
规则说明:
RewriteCond %{REQUEST_URI} ^/folder/(?!subfolder/):用负向前瞻断言,精准匹配**以/folder/开头,但紧接着不是subfolder/**的请求,避免误匹配已经包含subfolder的路径。RewriteRule ^/folder/(.*)$ /folder/subfolder/$1:提取/folder/后面的所有内容(比如请求/folder/page时,$1就是page),拼接到/folder/subfolder/后面,得到正确的目标路径。[R=301,L]:R=301表示永久重定向(如果是临时重定向可以改成R=302),L表示执行完这条规则后停止后续规则处理,防止冲突。
为什么原来的规则失效?
你之前的RewriteRule ^(.*)$ /folder/subfolder/$1会把整个请求URI(比如/folder/page)作为$1,最终生成/folder/subfolder/folder/page,路径重复了/folder,自然不符合预期。
这个规则可以批量处理所有符合条件的页面,不需要逐个配置。
内容的提问来源于stack exchange,提问作者Dyvel
相关产品推荐
相关产品推荐

