如何将静态.htaccess规则改为动态规则,实现根路径跳转及路径隐藏
解决方案
你之前出现302错误和首页无法访问,核心是原配置中HTTPS跳转规则缺失协议头,同时规则顺序错误导致重定向循环,以下是修复后的完整配置:
RewriteEngine On RewriteBase / # 修复HTTPS跳转规则:443端口跳转至带协议的无www域名 RewriteCond %{SERVER_PORT} 443 RewriteCond %{HTTP_HOST} ^www\.avantitecnologiati\.com.br [NC] RewriteRule ^(.*)$ https://avantitecnologiati.com.br/$1 [R=301,L] # 规则1:直接访问真实存储路径的请求,301重定向到根目录短路径 RewriteCond %{THE_REQUEST} \s/agencias/pagina_agencia/([^\s/.]+)(\.php)?\s [NC] RewriteRule ^ /%1 [R=301,L] # 规则2:动态匹配根目录请求,映射到agencias/pagina_agencia目录下的php文件 # 仅当根目录无对应文件/目录、且目标路径存在对应php文件时才重写 RewriteCond %{HTTP_HOST} ^www\.avantitecnologiati\.com.br [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/agencias/pagina_agencia/$1.php -f RewriteRule ^([^/]+)$ agencias/pagina_agencia/$1.php [L,QSA] # 原有隐藏.php后缀规则 RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP/.+ [NC] RewriteRule ^(.+)\.php$ /$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php [NC,L] <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/shtml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript </IfModule> #Custom Error Page ErrorDocument 404 http://www.avantitecnologiati.com.br/
配置说明
- 自动适配新增文件:规则2会自动检测
agencias/pagina_agencia目录下的php文件,无需每次手动添加RewriteRule,新增文件后直接访问根目录对应文件名即可生效 - 隐藏真实路径:规则1会拦截所有直接访问真实存储路径的请求,自动301重定向到根目录短路径,不会暴露实际存储位置
- 兼容原有逻辑:保留了原有的.php后缀隐藏、静态资源压缩、404错误页配置,原有功能不受影响
- 避免循环冲突:通过
THE_REQUEST匹配原始请求、REQUEST_FILENAME判断文件存在性的方式,规避了内部重写导致的重定向循环问题
内容的提问来源于stack exchange,提问作者Sophie
相关产品推荐
相关产品推荐

