htaccess规则 - 多语言网站

时间:2016-07-27 14:11:10

标签: .htaccess mod-rewrite url-rewriting multilingual

我在我的网站上创建了一个语言脚本。此脚本识别URL中的语言并加载语言定义。

例如:

RewriteRule ^(.+)/about/?$ sobre2.php?lang=$1    <-- working fine
RewriteRule ^(.+)/contact/?$ contato2.php?lang=$1  <-- working fine
RewriteRule ^(.+)/products/?$ produtos2.php?lang=$1  <-- working fine
RewriteRule ^(.+)/contact/sales/?$ contato-vendas2.php?lang=$1  <-- working fine
RewriteRule ^(.+)/contact/general/?$ contato-form2.php?lang=$1  <-- working fine

分别访问上面的页面:

https://domain.com/b2b/pt-br/about/
https://domain.com/b2b/pt-br/contact/
https://domain.com/b2b/pt-br/products/
https://domain.com/b2b/pt-br/contact/sales/
https://domain.com/b2b/pt-br/contact/general/

这在除索引之外的所有页面中都能正常工作。

当我尝试使用索引页面执行相同操作时,使用以下代码:

RewriteRule ^(.+)/?$ index2.php?lang=$1

除了它不起作用外,它还会影响所有其他页面(和资源),因此不会加载资源,页面看起来像纯粹的html&#34;。

我想知道如何配置htaccess来制作我的&#34; index2.php&#34;可以这样访问:

https://domain.com/b2b/pt-br/

谢谢。

1 个答案:

答案 0 :(得分:1)

.+将匹配任何字符中的一个或多个,如果您将规则放在其他规则之前,那么这将使其他规则无效。

您可以使用以下规则:

RewriteEngine On
RewriteBase /b2b/

RewriteRule ^((?!pt-br/).*)$ pt-br/$1 [L,R=301,NC]

RewriteRule ^(.+)/about/?$ sobre2.php?lang=$1 [L,QSA]
RewriteRule ^(.+)/contact/?$ contato2.php?lang=$1 [L,QSA]
RewriteRule ^(.+)/products/?$ produtos2.php?lang=$1 [L,QSA]
RewriteRule ^(.+)/contact/sales/?$ contato-vendas2.php?lang=$1 [L,QSA]
RewriteRule ^(.+)/contact/general/?$ contato-form2.php?lang=$1 [L,QSA]
RewriteRule ^([a-z]{2}-[a-z]{2})/?$ index2.php?lang=$1 [NC,L,QSA]