gpt4 book ai didi

.htaccess - Mod 重写以从 Concrete5 cms 中的 url 中删除语言

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:40:30 25 4
gpt4 key购买 nike

我完全被难住了。希望你能帮忙。我刚刚花了一个月的时间在最新版本的 Concrete5 版本 7.3.1 中重新开发我们的网站,我已经准备好发布了。这是一个多语言网站,我们的 SEO 人员建议不要在默认语言(英语)的 URL 中包含该语言,因为它会将我们的主页从 domain.com/更改为 domain.com/en/,并且我们的旧网站默认语言在基本目录中。

Concrete5 不支持这一点,所以基本上我希望通过一些 .htaccess 技巧来实现这一点,但我无处可去。

Concrete5 url 是 domain.com/index.php/en/path/to/page,因此所有页面都来自 index.php。有如下重写规则来对用户隐藏 index.php 并使 url 漂亮。

#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME}/index.html !-f
#RewriteCond %{REQUEST_FILENAME}/index.php !-f
#RewriteRule . index.php

我想进一步添加一种方法,从不包含它的 url 为服务器端添加/en/。即

RewriteRule ^/index.php/(.*) ^/index.php/en/$1 [L]

所以我可以从 url 中去掉 en,系统仍然可以工作。

我试过在混凝土重写(没有 index.php)之前、之后和多个不同的组合中放置它,但是不断收到 401 错误并且很难诊断问题,因为查看生成的 url 并不那么容易。

任何帮助将不胜感激,因为我必须在发布前解决这个问题。

最佳答案

this recently added event在即将发布的新 5.7.4 版本中,我们可以对请求做一些有趣的事情。我们可以做的一件事是确保该路径上的页面不存在,然后重写请求以使其看起来具体 5 该请求实际上正在进入 /en

\Events::addListener('on_before_dispatch', function() {
$request = \Request::getInstance();
$page = \Page::getByPath($request->getPath()); // Get the real requested page

if ($page->isError()) { // If it doesn't exist
$path = new \Concrete\Core\Url\Components\Path($request->getPath());
$path = $path->prepend('en'); // prepend "/en" to the path, ex: "/path/to" becomes "/en/path/to"

$page = Page::getByPath($path);
if (!$page->isError) { // Make sure that this page actually exists
// This may not work, you might need to replace the actual \Request instance.
$request->setCurrentPage($page); // Set it to the requested page.
}
}
});

我真的建议你不要这样做。正如我对该问题的评论中所述,您会遇到非常奇怪的情况,这些情况会导致您网站出现 SEO 问题和一般路由问题。


编辑:concrete5 version 8包含了HTTP中间件,可以更好的解决这个问题。

关于.htaccess - Mod 重写以从 Concrete5 cms 中的 url 中删除语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29807659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com