11

我遇到了 .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 和我的实时服务器。有任何想法吗?谢谢

4

1 回答 1

16

你试过什么了?像下面这样的东西应该可以工作:

RewriteRule ^/(en|de)/(.*)$  $2?language=$1 [L]

意思很明显:取第二个$2匹配项?language=(或$1之一。如果您想将任何内容(不仅是or )匹配为语言,请将规则更改为:endeende

RewriteRule ^/(.+?)/(.*)$  $2?language=$1 [L]

请注意?第一组中的 将使匹配在第一个斜杠处停止,这样您就不会重写例如。

/en/subdir/pippo.php

pippo.php?language=en/subdir

而是

subdir/pippo.php?language=en

如有疑问,Apache 网站上有一个出色的文档


编辑:默认语言

要使所有其他请求(即不以/en/or开头的 URL /de/)重定向到默认语言(例如en),首先您必须知道要识别的语言前缀,然后使用以下规则 - 下面,我假设有三种 -3- 语言,带有代码en和:defr

RewriteEngine On
RewriteBase /

RewriteRule ^(en|de|fr)/(.*)$  $2?language=$1 [L,QSA]
RewriteRule ^(.*)$  $1?language=en [L,QSA]

如果您没有在第一个中定义确切的语言集RewriteRule(例如,使用我之前的“任何语言”解决方案),嵌套页面上的语言检测可能会失败。规则按此顺序很重要,因为第一个规则会将页面与语言代码匹配然后退出,而第二个规则将仅在第一个不匹配时应用。

于 2013-05-31T10:22:44.960 回答