【问题标题】:How to change root directory in htaccess如何在htaccess中更改根目录
【发布时间】:2018-12-03 15:41:07
【问题描述】:

我有这个双语网站,我想通过创建一个包含所有页面的"/en" 子目录来解决这个问题。 我可以访问example.com/en/page URL,但我想让example.com/en 成为根目录,因此任何基于"/another-page" 的重定向都将转到example.com/en/another-page, 而不是example.com/another-page

我尝试使用 .htaccess 和以下命令:

RewriteBase /
RewriteCond %{REQUEST_URI} !^/en/
RewriteCond %{HTTP_HOST} ^(www\.)?localhost:8080\.
RewriteRule ^(.*)$ /en/$1 [L]

但它没有用。关于如何完成这项工作的任何想法?

【问题讨论】:

  • “但是没有用。” - 一个错误?重定向不正确?没有什么?大概你有一个RewriteEngine On 指令?为什么检查Host 标头的条件(这与您的example.com 相矛盾)?您的.htaccess 文件中还有其他内容吗?否则,您应该已经“工作”(但可以简化)。
  • 是的,我开启了 RewriteEngine。它什么也没做。添加 .htaccess 文件后,我单击带有指向 / 的 URL 的锚标记。我希望它转到 example.com/en/,但它转到了 example.com @MrWhite

标签: apache .htaccess mod-rewrite


【解决方案1】:

您在问题中发布的代码是“重写”,而不是“重定向” - 所以这可能是根本问题。如果您的应用程序从 REQUEST_URI 获取语言,那么它不会看到包含该语言的重写 URL。

在站点根目录中的.htaccess 顶部尝试以下操作:

RewriteEngine On

RewriteRule !^(en|xx)($|/) /en%{REQUEST_URI} [R,L]

xx 是“其他”语言。

不需要检查REQUEST_URI 服务器变量的条件,因为这应该在RewriteRule 模式 中检查。而且我已经删除了对HTTP_HOST 的检查,因为在这个特定的示例中这似乎是多余的?

【讨论】:

  • 那也没用。我要做的是检查当前页面是否在 /en 文件夹中,基本上是否 url 是 localhost:8080/en/something。如果是这样,则将所有页面重定向到 /en 文件夹。例如,如果我在页面 localhost:8080/contact 和 pre anchor tag where href="/about",我希望我的网站转到 localhost:8080/en/about 而不是 localhost:8080/about
  • 在您想要重定向的请求之前,您无法实际检查“当前页面”是什么。但是,上面应该重定向 everything - 所以它应该做 something?我已经更新了正则表达式以排除其他语言 - 大概也表示为 URL 前缀?
  • 所以基本上,我不能将我的 /en 目录设置为 .htaccess 的根目录?
  • 上述“重定向”是否做了任何事情?它是否重定向?您确实可以有效地“隐藏”子目录(这就是您在问题中所做的)-但这是否适用于您的应用程序是另一回事。 (尽管您实际上不能“更改文档根目录” - 而且您也不想这样做。)正如我在最初的评论中所问的那样.......htaccess 中还有其他指令吗?你是如何路由你的 URL 的?或者您只是使用物理 HTML 文件?
  • TBH,我原以为你应该重定向这个而不是重写? /en/ 不是也可以访问吗?
猜你喜欢
  • 2011-08-24
  • 2015-07-11
  • 2021-01-29
  • 1970-01-01
  • 2012-01-11
  • 2012-08-10
  • 1970-01-01
  • 2021-12-20
  • 2016-05-24
相关资源
最近更新 更多