草庐IT

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

coder 2024-02-29 原文

我完全被难住了。希望你能帮忙。我刚刚花了一个月的时间在最新版本的 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/

有关.htaccess - Mod 重写以从 Concrete5 cms 中的 url 中删除语言的更多相关文章

  1. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  2. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  3. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  4. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  5. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  6. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

    如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

  7. ruby-on-rails - 使用 Dragonfly 从 URL 分配图像 - 2

    我正在使用Dragonfly在Rails3.1应用程序上处理图像。我正在努力通过url将图像分配给模型。我有一个很好的表格:{:multipart=>true}do|f|%>RemovePicture?Dragonfly的文档指出:Dragonfly提供了一个直接从url分配的访问器:@album.cover_image_url='http://some.url/file.jpg'但是当我在控制台中尝试时:=>#ruby-1.9.2-p290>picture.image_url="http://i.imgur.com/QQiMz.jpg"=>"http://i.imgur.com/QQ

  8. ruby 正则表达式 : replace double slashes in URL - 2

    除了协议(protocol)定义中的斜杠('http[s]://'、'ftp://'等)之外,我想替换URL中的所有多个斜杠。我该怎么做?此代码无一异常(exception)地替换:url.gsub(/\/\/+/,'/') 最佳答案 您只需排除任何以:开头的匹配项url.gsub(/([^:])\/\//,'\1/') 关于ruby正则表达式:replacedoubleslashesinURL,我们在StackOverflow上找到一个类似的问题: http

  9. ruby-on-rails - 尝试安装 cms 时 Bundler::GemfileNotFound - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我尝试安装CMS时出现错误。它说Bundler::GemfileNotFound此外,当我运行bundle时,它还会显示Bundler::GemfileNotFound我该如何解决这个问题?

  10. ruby - 使用 ruby​​ 从文本中删除 url - 2

    给定一个文本,我想删除url部分并保留其他文本。例子:'blablabla...blablabla...http://bit.ly/someuriblablabla...'成为'blablabla...blablabla...blablabla...'是否有任何ruby​​内置方法可以有效地执行此操作? 最佳答案 尝试使用正则表达式:(?:f|ht)tps?:\/[^\s]+ 关于ruby-使用ruby​​从文本中删除url,我们在StackOverflow上找到一个类似的问题:

随机推荐