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

Php htaccess重写以支持带有下拉选择器的多语言站点。如何解决这个问题?,php,.htaccess,Php,.htaccess,这是我的结构: 在我的页面example.com中,我有多种语言。在索引页面中,我还有一个下拉菜单,您可以更改您的语言。此下拉列表也出现在其他页面中 这是我对根文件的访问权限 RewriteEngine On RewriteRule ^(en|pl|cz|hu)?$ index.php?lang=$1 [NC,L] 因此,我编写了一个代码,如果域是example.com/en,它将加载英文翻译 我的问题是在其他页面上,我无法更改语言并停留在同一页面上 因此,当我在www.example.com

这是我的结构:

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

这是我对根文件的访问权限

RewriteEngine On
RewriteRule ^(en|pl|cz|hu)?$ index.php?lang=$1 [NC,L]
因此,我编写了一个代码,如果域是
example.com/en
,它将加载英文翻译

我的问题是在其他页面上,我无法更改语言并停留在同一页面上

因此,当我在
www.example.com/en
上点击
link.php
example.com/link.php
)时,我可以通过
会话保留首选语言

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

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

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

我怎样才能解决这个问题? 这是一件容易接触的事情吗

我可以认为是一种逻辑,但不知道如何实现

当域包含
(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文件**

重新编写引擎打开
重写规则^(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
。您只需将表单
$\u POST
返回到其上的页面即可

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

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

use
$\u GET['lang']
instead@xalloumokkelos这是一个下拉列表,它怎么不是表单输入?@Hazonko,如果使用
GET
发送表单,将参数保持在url@JCSama嗯,这取决于网站,通常对我的客户和数字营销团队来说,我们会尽一切努力不显示你得到的美元。但是,是的,它会起作用当然……我使用了。*。正确的方法是
RewriteRule^(en | pl | cz | hu)/([a-zA-Z0-9-/]+).php$$2.php?lang=$1[NC,L]
对我的错误表示抱歉。你必须使用css的域路径!www.domain.com/css_folder/style.css@Xalloumokkelos,我已经用css进行了测试。一切正常,只需使用.css文件的完整域路径即可。谢谢,但这会打断我的cssThank You。请告诉我,如果我只想保留www.example.com/link和链接到
en
?@Xalloumo凯洛斯,我不明白!