【问题标题】:How to htaccess url rewrite multi language如何htaccess url重写多语言
【发布时间】:2021-06-17 15:19:10
【问题描述】:

有人可以帮我解决 htaccess 重写网址吗?

  1. 我需要将 ?lang=en 转换为 /en
  2. 始终显示 url 中使用的语言
  3. 当有人来到 example.com 自动 301 重定向他们 以 example.com/en 为主要语言。
  4. 当用户选择另一种语言留在同一页面上时,例如 example.com/en/contact.php

我在网站 en、de、hr 上共有三种语言。

我的代码的问题是,当我转到 example.com/contact 并选择一种语言时,它会将我带回主页 example.com/en。如果我手动输入 example.com/en/contact 它可以工作。

如果我在 example.com/en/contact 并选择另一种语言,例如/de url 更改为 example.com/en/de 并出现 404 错误。

我当前的 htaccess 代码如下所示

# Convert ?lang=en in /en
RewriteRule ^([a-z]{2})/?$ ?lang=$1 [QSA,L]
RewriteRule ^([bs|en|de]{2})/(.*)$ $2?lang=$1&%{QUERY_STRING} [L,QSA]

# Remove trailing slash from URL
RewriteCond %{REQUEST_URI} /(.+)/$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ https://example.com/%1 [R=301,L]

# Remove php extension in URL
RewriteCond %{REQUEST_FILENAME}\.php -f   
RewriteRule ^(.*)$ $1.php

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    对于您显示的示例,您能否尝试以下操作。 请确保在测试您的 URL 之前清除您的浏览器缓存。

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-SSL} !ON
    RewriteCond %{HTTP_HOST} ^(?:www\.)reg\.bmi\.id$ [NC]
    RewriteRule ^/?$ https://reg.bmi.id [R=301,L]
    
    RewriteRule ^index\.php$ - [L]
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\scontact/contact\.php [NC]
    RewriteRule ^ https://reg.bmi.id [R=301]
    RewriteRule ^ contact/contact.php [NC,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    

    【讨论】:

    • 我试过了,但我得到了错误 500。这段代码似乎有问题:RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\scontact/contact\.php [NC] RewriteRule ^ https://reg.bmi.id [R=301] RewriteRule ^ contact/contact.php [NC,L] 我已经列出了“联系人”页面,例如。如果用户在“关于我们”或“联系我们”页面并决定更改语言,他应该留在当前页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    相关资源
    最近更新 更多