【问题标题】:.HTACCESS Redirect 301 all files from root directory to sub directory.HTACCESS Redirect 301 所有文件从根目录到子目录
【发布时间】:2016-05-10 21:39:30
【问题描述】:

我正在尝试将访问我的 Web 根目录的用户重定向到子目录。

我正在尝试这个:

//301 重定向整个目录

RedirectMatch 301 /(.*) /1.0/projects/navigator/$1

但是,它不起作用,而是多次重复子目录的路径:

[my_domain]/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0 /projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects /navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/1.0/projects/navigator/

如何做到这一点?

提前致谢

【问题讨论】:

  • 我也想用同样的重写规则来替代重定向。谢谢

标签: .htaccess redirect mod-alias


【解决方案1】:

将以下代码放在根目录.htaccess文件中

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/1.0/projects/navigator/
# the above line will exclude the same sub directory from the rule below so
# no looping as what happened with you 
RewriteRule ^(.*)$ /1.0/projects/navigator/$1 [R=301,L]

【讨论】:

  • 即使更改了地址栏中的 url,也不是真正的重定向;使用相对 url 的资源不起作用。也许重写是预期的,但重定向不应该是这种情况。真正的(不可见的)重写将是最优选的解决方案。
【解决方案2】:

您必须排除要重定向到的路径:

RedirectMatch 301 /((?!1.0/projects/navigator).*) /1.0/projects/navigator/$1

否则您将收到重定向循环错误,因为/1.0/projects/navigator/ 还匹配模式/(.*) 并将请求多次重定向到同一目的地。

在测试之前清除浏览器的缓存。

【讨论】:

  • 它实际上不起作用,因为它仍然循环最后两个段(/projects/navigator/)
  • @henrikhansen 奇怪,这段代码在我的 apache 服务器上运行良好。
  • 清除浏览器缓存。
  • 即使我清除了 Firefox 和 Safari 中的浏览器缓存,我也无法使其在 one.com 网络主机上运行...
猜你喜欢
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2014-07-03
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 2014-02-21
相关资源
最近更新 更多