.htaccess配置问题:旧域名全页面重定向至新域名对应页面失败
问题描述
我配置.htaccess时遇到了问题,期望实现的重定向效果:
old.site重定向至new.siteold.site/a/重定向至new.site/a/old.site/b/重定向至new.site/b/- 以此类推...
但实际结果是:
old.site重定向至new.siteold.site/a/重定向至new.siteold.site/b/重定向至new.site- 以此类推...
补充说明:两个域名指向不同的服务器。
以下是我当前的完整.htaccess代码:
# # av:php5-engine AddHandler av-php8 .php # # av:Toolbar SetEnv AV_TOOLBAR 0 # av:AntiHotlink RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} \.(gif|jpe?g|png)$ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://([a-z0-9\-\.]*)distopia\.altervista\.org RewriteCond %{REQUEST_URI} !^\/_altervista_ht\/ RewriteCond %{HTTP_REFERER} !^http://([a-z0-9\-\.]+)google\. RewriteRule .*$ http://hl.altervista.org/split.php?http://%{HTTP_HOST}%{REQUEST_URI} [R,L] # AntiHotlink # av:PHP-upload php_value upload_max_filesize 20M php_value post_max_size 20M php_value max_input_time 300 # PHP-upload RewriteEngine On RewriteRule ^(.*)$ https://distopia-eva.org/$1 [R=301]
解决方案
问题出在最后的重定向规则缺少域名限定,优化后即可保留路径重定向。具体修改如下:
- 删掉重复的
RewriteEngine On(前面的AntiHotlink部分已经开启过); - 给重定向规则添加域名判断,确保仅针对旧域名生效,同时保留路径传递。
修改后的重定向代码段:
# 旧域名重定向到新域名,保留完整路径 RewriteCond %{HTTP_HOST} ^distopia\.altervista\.org$ [NC] RewriteRule ^(.*)$ https://distopia-eva.org/$1 [R=301,L]
完整的.htaccess代码:
# # av:php5-engine AddHandler av-php8 .php # # av:Toolbar SetEnv AV_TOOLBAR 0 # av:AntiHotlink RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} \.(gif|jpe?g|png)$ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://([a-z0-9\-\.]*)distopia\.altervista\.org RewriteCond %{REQUEST_URI} !^\/_altervista_ht\/ RewriteCond %{HTTP_REFERER} !^http://([a-z0-9\-\.]+)google\. RewriteRule .*$ http://hl.altervista.org/split.php?http://%{HTTP_HOST}%{REQUEST_URI} [R,L] # AntiHotlink # av:PHP-upload php_value upload_max_filesize 20M php_value post_max_size 20M php_value max_input_time 300 # PHP-upload # 旧域名重定向到新域名,保留完整路径 RewriteCond %{HTTP_HOST} ^distopia\.altervista\.org$ [NC] RewriteRule ^(.*)$ https://distopia-eva.org/$1 [R=301,L]
关键说明:
RewriteCond限定仅旧域名的请求触发重定向,避免不必要的规则执行;$1会捕获原始请求的完整路径(包括/a/、/b/等),确保重定向到新域名的对应路径;[L]标记表示处理完该规则后停止后续规则解析,符合规范。
内容的提问来源于stack exchange,提问作者Zorro
相关产品推荐
相关产品推荐

