如何修改根目录.htaccess使/old/子目录的站点备份正常访问
解决方案
问题原因
根目录下的.htaccess重写规则会拦截/old/子目录的所有请求,将静态资源、路由请求全部转发到根目录对应的文件或站点入口,导致子目录下的备份站点无法正常响应。
步骤1:修改根目录.htaccess规则
在原规则基础上新增/old/路径的排除规则,同时修正原301跳转规则的笔误,修改后的完整代码如下:
RewriteEngine On # 新增:排除old子目录的所有请求,不执行后续重写规则 RewriteRule ^old(/.*)?$ - [L] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d RewriteRule ^ - [L] RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.com$ [NC] RewriteCond %{HTTP_HOST} !^www\. [NC] # 修正原规则的笔误,将%example.com改为%1example.com RewriteRule .? http://www.%1example.com%{REQUEST_URI} [R=301,L] RewriteRule ^([^/]*)/css/(.*) /css/$2 [L] RewriteRule ^([^/]*)/js/(.*) /js/$2 [L] RewriteRule ^([^/]*)/fonts/(.*) /fonts/$2 [L] RewriteRule ^([^/]*)/images/(.*) /images/$2 [L] RewriteRule ^([^/]*)/templates/(.*) /templates/$2 [L] RewriteRule ^([^/]*)/$ /index.php?lang=$1 [L] RewriteRule ^([^/]*)/([^/]*)$ /index.php?lang=$1 [L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?lang=$1 [L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /index.php?lang=$1 [L]
步骤2:配置/old/子目录的重写规则
- 把备份站点原有的.htaccess文件放到
/old/目录下 - 如果备份站原.htaccess配置了
RewriteBase,将其修改为RewriteBase /old/;如果没有相关配置,可在备份站.htaccess的RewriteEngine On后新增该行,保证子目录下的重写路径正确 - 若备份站没有自定义重写规则,无需额外配置,子目录会默认按普通目录规则解析文件
步骤3:验证效果
- 清除浏览器缓存(301重定向会被浏览器永久缓存,可使用隐私模式访问测试避免缓存影响)
- 访问域名+
/old/路径,确认备份站点页面、静态资源均可正常加载,同时根目录站点运行不受影响
内容的提问来源于stack exchange,提问作者Daniel Rossi
相关产品推荐
相关产品推荐

