.htaccess 如何只重定向我的主页,而保持其余URL不变?

ctrmrzij  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(190)

我需要重定向一些URL,因为它们指向同一个页面。例如:

https://www.example.com/home
https://www.example.com/Home
https://www.example.com/index.php

所有这些URL都需要Map到:

https://www.example.com/

因此,我在.htaccess文件中使用了此函数,它工作正常:

Redirect 301 /home  https://www.example.com/

但问题是,当我尝试访问如下URL时:

https://www.example.com/home/sub

它重定向到导致404:

https://www.example.com//sub

我需要这个URL工作,因为它是代替404或任何重定向:

https://www.example.com/home/sub
kqqjbcuj

kqqjbcuj1#

Redirect 301 /home  https://www.example.com/

因为mod_alias Redirect指令是前缀匹配的,匹配之后的所有内容都被复制到目标URL的末尾。所以,当你请求/home/sub时,/sub被复制到https://www.example.com/,得到https://www.example.com//sub
我想你也有mod_rewrite指令,你应该避免混合两个模块的重定向,所以尝试下面的方法,而不是在根.htaccess文件的顶部使用mod_rewrite:

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(home|index\.php)$ / [R=301,L]

检查REDIRECT_STATUS环境变量的 condition 确保只处理直接请求,而不是内部重写的请求,后者将由于具有前端控制器模式(我假设您稍后在文件中有)而产生。
您需要清除浏览器缓存,因为错误的301(永久)重定向将被浏览器缓存。请使用302进行测试,以避免潜在的缓存问题。
参考编号:

  • https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect
  • https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewriterule

相关问题