如何在.htaccess中正确重定向指定URL?
解决.htaccess 301重定向无限循环问题
问题根源
你使用的Redirect指令是前缀匹配机制,第一条规则Redirect 301 /web-apps https://its4you.gr/ypiresies/web-apps会拦截所有以/web-apps开头的请求(包括后面的子路径),导致后面三条针对具体子页面的规则完全不会生效。同时,这种前缀匹配会把原本要重定向到/web-apps/xxx的请求错误转到/ypiresies/web-apps/xxx,进而触发服务器的其他路由逻辑,最终引发无限循环。
正确配置方案
改用mod_rewrite的RewriteRule,它支持精确匹配且规则优先级可控,把更具体的子路径规则放在最上方,避免被父路径规则提前拦截。以下是完整的.htaccess代码:
RewriteEngine On # 重定向具体子页面规则(放在最前面) RewriteRule ^web-apps/kataskevi-epaggelmatikou-katalogou$ /web-apps/kataskevi-epeggelmatikou-katalogou [R=301,L] RewriteRule ^web-apps/kataskevi-istoselidas-blog$ /web-apps/kataskevi-blog [R=301,L] RewriteRule ^web-apps/kataskevi-istoselidon-mesiton$ /web-apps/kataskevi-istoselidas-real-estate [R=301,L] # 重定向父路径规则(放在最后) RewriteRule ^web-apps$ /ypiresies/web-apps [R=301,L]
规则说明
RewriteEngine On:开启mod_rewrite模块(需确保服务器已启用该模块)。^和$:用于精确匹配URL路径,避免前缀匹配带来的误拦截。比如^web-apps$只会匹配/web-apps这个精确路径,不会匹配它的子路径。[R=301,L]:R=301表示永久重定向,L表示当前规则执行后终止后续规则的处理,避免冲突。
额外注意事项
- 测试前请清空浏览器缓存,因为301重定向会被浏览器强缓存,旧的重定向规则可能影响测试结果。
- 若服务器未启用
mod_rewrite,可联系服务商协助开启。
内容的提问来源于stack exchange,提问作者its4yougr
相关产品推荐
相关产品推荐

