具有多个RewriteRules的链参数

时间:2017-02-26 08:35:04

标签: php apache .htaccess mod-rewrite

我正在尝试获取用户所在的languagepage

典型的网址可能看起来像example.com/fr/login,这意味着他们会在fr页面上使用login语言。

语言部分也是可选的,URL也可能看起来像example.com/login(在这种情况下,我会检查用户是否有语言cookie,否则我默认显示英语)。

所以我的.htaccess看起来像:

# if url contains login, then route to page.php
RewriteRule login/?$ /page.php?login [QSA]

# if start of url contains a language param,
# make it available as a GET param for PHP to use
RewriteRule ^(en|fr)(?:/([^/]+))?$ $2?lang=$1 [NC,L,QSA]

我需要的结果是,如果我们在页面login上,则page.php应该会收到$_GET['lang'](值为fr)和$_GET['login'](没有价值,只是它的存在让我知道我们在登录页面上)。同样,如果我们继续使用example.com/fr,则index.php可以$_GET['lang']可用。

请注意,我有很多页面和多种语言,因此如果您只想重复使用所有可能方案的规则,那么它可能不是扩展许多页面和多种语言的最佳方式。

编辑:仍在测试它是否正常,但通过这样做取得了一些进展:

RewriteRule ^(en|fr|it)/?login$ /index?page=login&lang=$1 [QSA]

# Catch the rest
RewriteRule ^(en|fr|it) ?lang=$1 [NC,L,QSA]

0 个答案:

没有答案