.htaccess路径重写异常:访问根目录错误跳转至app文件夹
解决.htaccess路径重写规则问题
你的规则出现循环重写,导致访问根路径时被错误导向app目录——原因是内部重写后的请求会再次触发规则处理,最终被第二个规则捕获。以下是修正后的规则:
RewriteEngine On # 匹配根路径、/_next/或/images/开头的请求,内部重写到landing文件夹 RewriteCond %{REQUEST_URI} ^/$ [OR] RewriteCond %{REQUEST_URI} ^/(_next|images)/ RewriteRule ^(.*)$ /landing/$1 [END] # 其余所有请求内部重写到app文件夹 RewriteRule ^(.*)$ /app/$1 [END]
规则说明:
- 拆分原条件为两个更精确的判断:直接匹配根路径
^/$,或者匹配以/_next/、/images/开头的路径,避免原正则的模糊匹配。 - 使用
[END]标志替代[L],确保重写后停止所有后续的重写处理,防止内部重写后的请求再次进入规则循环。 - 若你的Apache版本低于2.4(不支持
END),可改用[L]并添加排除条件避免循环:
RewriteEngine On # 排除已重写到landing或app的路径,防止循环 RewriteCond %{REQUEST_URI} !^/(landing|app)/ # 匹配根路径、/_next/或/images/开头的请求 RewriteCond %{REQUEST_URI} ^/$ [OR] RewriteCond %{REQUEST_URI} ^/(_next|images)/ RewriteRule ^(.*)$ /landing/$1 [L] # 排除已重写到app的路径,防止循环 RewriteCond %{REQUEST_URI} !^/app/ # 其余请求重写到app文件夹 RewriteRule ^(.*)$ /app/$1 [L]
调整后可实现:
- 访问
/、/_next/xxx、/images/xxx时正确加载landing文件夹内容 - 其他所有路径都内部重写到app文件夹,不会出现循环重写导致的错误跳转
内容的提问来源于stack exchange,提问作者L. Grolleau
相关产品推荐
相关产品推荐

