繁体   English   中英

htaccess重写以支持带有下拉选择器的多语言网站。 如何解决这个问题?

[英]htaccess rewrite to support multilingual site with dropdown selector. How to fix this?

这是我的结构:

在我的页面example.com中我有多种语言。 在索引页面中,我还有一个下拉菜单,您可以更改您的语言。 此下拉列表也出现在其他页面中。

这是我对根文件的htaccess

RewriteEngine On
RewriteRule ^(en|pl|cz|hu)?$ index.php?lang=$1 [NC,L]

所以,我写了一个代码,如果域是example.com/en它将加载英文翻译。

我的问题是在其他页面上我无法更改语言并保持在同一页面上。

所以,当我在www.example.com/en并点击link.phpexample.com/link.php )时,我可以通过Session保留link.php语言

但是当我在example.com/link.php并更改语言时,结果不正确(结果是一些需要修复的PHP代码的输出,我相信它不适合这里)

我想的是包含/en/ (或网址中的任何其他语言,例如www.example.com/en/link.php

但这给了我404错误。 我相信是因为htaccess文件,我没有任何名为en等的文件夹。

我怎么解决这个问题? 它是一个htaccess的东西?

我可以认为逻辑但不知道如何实现就像

当域包含(en|pl|cz|hu)后跟/***通过****.php?lang=$1

试试这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(en|pl|cz|hu)/(.*)?$ $2.php?lang=$1 [NC,L]

你可以在会话中存储lang变量,如下所示:

// link.php
if (isset($_GET['lang']) {
    $_SESSION['lang'] = $_GET['lang'];
}
$lang = $_SESSION['lang'];

编辑:**现在htaccess只适用于.php文件。 **

RewriteEngine On RewriteRule ^(en|pl|cz|hu)/([a-zA-Z0-9-/]+).php$ $2.php?lang=$1 [NC,L]现在你的链接必须是www.domain.com/en/index www.domain.com/en/link www.domain.com/pl/link

如果您有任何疑问,请询问。

你根本不需要使用.htaccess 你可以将表单$_POST返回到它所在的页面。

if ($_POST['language']) {
    $_SESSION[KEY]['Language'] = $_POST['language'];
}

然后根据会话中的变量,定义要使用的语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM