.htaccess语言检测规则
我在.htaccess上遇到了一些问题 我的简化文件服务器结构如下所示:.htaccess语言检测规则,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我在.htaccess上遇到了一些问题 我的简化文件服务器结构如下所示: /index.php /signup.php 我需要使用虚拟URL来处理语言切换: www.mydomain.com/en/signup.php www.mydomain.com/de/signup.php 所以my.htaccess应该检查url是否包含/en/或/de/,并将其翻译为例如/signup.php?language=de 基本上说,它应该去掉语言标签,但保留文件夹结构的其余部分 它应该可以在本地x
/index.php
/signup.php
我需要使用虚拟URL来处理语言切换:
www.mydomain.com/en/signup.php
www.mydomain.com/de/signup.php
所以my.htaccess应该检查url是否包含/en/或/de/,并将其翻译为例如/signup.php?language=de
基本上说,它应该去掉语言标签,但保留文件夹结构的其余部分
它应该可以在本地xampp和live server上运行。
有什么想法吗?谢谢到目前为止你都试了些什么?类似于以下的方法应该可以工作:
RewriteRule ^/(en|de)/(.*)$ $2?language=$1 [L]
意思很明显:取第二个匹配($2
),即URL中第二个斜杠之后的内容,将?language=
延迟到它之后,然后是第一个匹配($1
),即前两个斜杠之间的内容-前提是它是en
或de
中的一个。
如果要将任何内容(不仅是en
或de
)作为语言匹配,请将规则更改为:
RewriteRule ^/(.+?)/(.*)$ $2?language=$1 [L]
请注意:第一组中的?
将使匹配在第一个斜杠处停止,这样您就不会重写eg
/en/subdir/pippo.php
到
而是
subdir/pippo.php?language=en
如果有疑问,Apache网站上会有一个链接
编辑:默认语言 要使所有其他请求(即不以
/en/
或/de/
开头的URL)重定向到默认语言(例如en
),首先您必须知道要识别的语言前缀,然后使用以下规则-下面,我假设有三种-3-语言,代码en
,de
和fr
:
RewriteEngine On
RewriteBase /
RewriteRule ^(en|de|fr)/(.*)$ $2?language=$1 [L,QSA]
RewriteRule ^(.*)$ $1?language=en [L,QSA]
如果在第一个
重写规则中未定义确切的语言集(例如使用我以前的“任意语言”解决方案),则嵌套页面上的语言检测可能会失败。规则的顺序很重要,因为第一个规则将匹配语言代码的页面,然后退出,而第二个规则将仅在第一个规则不匹配时应用 这看起来很好:)如何将我的语言默认设置为EN?例如,如果没有定义语言标记->重定向到mydomain.com/en/?由于所有这些规则都被标记为[L]
(选中最后一条规则),您可以在它们之后编写一个英语重定向:RewriteRule^(.*)$$1?language=$1[L]
但此规则必须是最后一条。@Fuxi您只想要mydomain.com->mydomain.com/en/,或者所有mydomain.com/stuff都转到mydomain.com/en/stuff?第二条规则有点复杂——是的,我需要第二条选择:/对我来说,第二条规则并没有像预期的那样有效。我的css、js和图像没有正确重定向,尽管我已经重写了cond%{REQUEST_FILENAME}-f并重写cond%{REQUEST_FILENAME}-重写规则之前的d语句。但当我将第二个重写规则更改为:RewriteRule^(+?)?/$index.php?url=$1&lang=de[L,QSA]时,它就起作用了
RewriteEngine On
RewriteBase /
RewriteRule ^(en|de|fr)/(.*)$ $2?language=$1 [L,QSA]
RewriteRule ^(.*)$ $1?language=en [L,QSA]