【发布时间】:2018-07-23 21:07:05
【问题描述】:
现在我已经编写了几十个重定向,有些使用棘手的正则表达式,有些更温和,但今天,最简单的重定向是在运行 Apache 2.2.3 的 CentOS 服务器上难倒我。
我想做的就是将旧域上的每个请求(无论路径和查询字符串如何)重定向到新站点的首页仅 .这就是为什么,例如,mod_alias Redirect 指令是不合适的,因为它将路径附加到新地址。
在定义了虚拟服务器的 Apache conf 文件中,我现在有了
<VirtualHost THE.IP.ADDRESS:80>
DocumentRoot "/var/www/html/SITE_ROOT"
ServerName OLD_DOMAIN.com
<Directory "/var/www/html/SITE_ROOT">
Options FollowSymLinks
RewriteEngine On
RewriteRule ^$ https://NEW_DOMAIN [R=301,L]
AllowOverride None
</Directory>
</VirtualHost>
虽然重定向到https://NEW_DOMAIN 的操作按预期进行,但始终附加原始请求的路径,从而导致新站点出现 404 错误。
比如访问http://OLD_DOMAIN.com/asdf
重定向到https://NEW_DOMAIN.com/asdf
...当我真的想到达https://NEW_DOMAIN.com/ 时
为什么要附加路径,即使我没有收集模式匹配,也没有在目标中指定这样的匹配?
在 SO 上已经有很多这样的答案了:
但我找不到将这些解决方案与我自己的配置进行比较的差异。有什么想法吗?
【问题讨论】:
-
我发现的唯一区别是
RewriteRule ^$ https://NEW_DOMAIN中缺少尾随 /。也许你可以试试RewriteRule ^$ https://NEW_DOMAIN/ -
恐怕我已经尝试过了,但遗憾的是没有效果......不过还是谢谢你!
-
您是否清除了浏览器历史记录,只是为了确保您没有被浏览器缓存欺骗? (一些浏览器缓存重定向真的很顽固,所以如果你之前用不同的 htaccess 设置测试过这个,它确实故意包含了路径,这可能是原因。)
-
谢谢,但我尝试了不同的浏览器,甚至完全不同的设备——我从来没有将它配置为包含路径。虽然这种顽强的缓存在过去常常是我问题的根源,但这次不是。不过谢谢!
标签: apache mod-rewrite