Php htaccess重写以支持带有下拉选择器的多语言站点。如何解决这个问题?
这是我的结构: 在我的页面example.com中,我有多种语言。在索引页面中,我还有一个下拉菜单,您可以更改您的语言。此下拉列表也出现在其他页面中 这是我对根文件的访问权限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
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凯洛斯,我不明白!