我遇到了.htaccess的一些问题 我的简化文件服务器结构如下:
/index.php
/signup.php
我需要使用虚拟网址来处理语言切换:
www.mydomain.com/en/signup.php
www.mydomain.com/de/signup.php
所以我的.htaccess应检查url是否包含/ en /或/ de /并将其翻译为例如。 /signup.php?language=de
基本上说,它应该删除语言标记,但保留文件夹结构的其余部分。
它应该适用于我的本地xampp和我的实时服务器。 有任何想法吗?感谢
答案 0 :(得分:14)
到目前为止你尝试了什么?以下内容应该有效:
RewriteRule ^/(en|de)/(.*)$ $2?language=$1 [L]
意思相当明显:进行第二场比赛($2
),这是在网址中的第二个斜线之后,在其后推迟?language=
,然后是第一场比赛({ {1}}),即前两个斜杠之间的内容 - 只要它是$1
或en
之一。
如果您想将任何内容(不仅de
或en
)与语言匹配,请将规则更改为:
de
请注意:第一组中的RewriteRule ^/(.+?)/(.*)$ $2?language=$1 [L]
会使匹配在第一个斜线停止,因此您不会重写例如。
?
到
/en/subdir/pippo.php
而是
pippo.php?language=en/subdir
如果有疑问,Apache网站上会有excellent documentation。
修改:默认语言
要使所有其他请求(即不以subdir/pippo.php?language=en
或/en/
开头的网址)重定向到默认语言(例如/de/
),首先您必须知道语言前缀你想要识别,然后使用以下规则 - 下面,我假设有三种-3种语言,代码en
,en
和de
:
fr
如果您没有在第一个RewriteEngine On
RewriteBase /
RewriteRule ^(en|de|fr)/(.*)$ $2?language=$1 [L,QSA]
RewriteRule ^(.*)$ $1?language=en [L,QSA]
中定义确切的语言集(例如,使用我以前的“任何语言”解决方案),则嵌套页面上的语言检测可能会失败。重要的是规则按此顺序排列,因为第一个规则将使用语言代码匹配页面然后退出,而第二个规则仅在第一个匹配时才应用。