Fux*_*uxi 9 .htaccess mod-rewrite
我遇到了一些问题.htaccess我的简化文件服务器结构如下:
/index.php
/signup.php
Run Code Online (Sandbox Code Playgroud)
我需要使用虚拟URL来处理语言切换:
www.mydomain.com/en/signup.php
www.mydomain.com/de/signup.php
Run Code Online (Sandbox Code Playgroud)
所以我的.htaccess应检查url是否包含/ en /或/ de /并将其翻译为例如. /signup.php?language=de
基本上说,它应该删除语言标签,但保留文件夹结构的其余部分.
它应该在我的本地xampp和我的实时服务器上工作.有任何想法吗?谢谢
Pao*_*fan 14
你都尝试了些什么?像下面这样的东西应该工作:
RewriteRule ^/(en|de)/(.*)$ $2?language=$1 [L]
Run Code Online (Sandbox Code Playgroud)
意思是相当明显的:取第二个匹配($2),即在URL中的第二个斜杠之后,推迟一个?language=之后,然后是第一个匹配($1),即前两个斜杠之间的内容 - 提供它的一个en或de.如果您想将任何内容(不仅仅是en或de)作为语言进行匹配,请将规则更改为:
RewriteRule ^/(.+?)/(.*)$ $2?language=$1 [L]
Run Code Online (Sandbox Code Playgroud)
请注意:?第一组中的匹配将使匹配在第一个斜线停止,因此您不会重写例如.
/en/subdir/pippo.php
Run Code Online (Sandbox Code Playgroud)
至
pippo.php?language=en/subdir
Run Code Online (Sandbox Code Playgroud)
而是为了
subdir/pippo.php?language=en
Run Code Online (Sandbox Code Playgroud)
如果有疑问,Apache网站上有一个很好的文档.
编辑:默认语言
要使所有其他请求(即,不以/en/或开头的URL /de/)重定向到默认语言(比如说en),首先您必须知道要识别的语言前缀,然后使用以下规则 - 下面,我假设有三种-3种语言,带代码en,de和fr:
RewriteEngine On
RewriteBase /
RewriteRule ^(en|de|fr)/(.*)$ $2?language=$1 [L,QSA]
RewriteRule ^(.*)$ $1?language=en [L,QSA]
Run Code Online (Sandbox Code Playgroud)
如果您没有在第一个语言中定义确切的语言集RewriteRule(例如,使用我以前的"任何语言"解决方案),语言检测可能会在嵌套页面上失败.重要的是,规则是在这个订单,因为第一个将匹配的语言代码,然后退出页面,而第二个将仅应用于如果第一个不匹配.