.htaccess,将语言代码重写为PHP变量

时间:2012-06-27 14:23:38

标签: php regex .htaccess mod-rewrite

我试图在这里找到一些例子,但它们都不适合我..我是一个和R.E一起工作的新手。

我需要一些帮助.htacess>重写规则。我怎么能做到这一点?

www.mysite.pt/folder/?a=home&id=22 -> www.mysite.pt/folder/index.php?lang=pt&a=home&id=22

www.mysite.pt/folder/en/?a=home&id=22 -> www.mysite.pt/folder/index.php?lang=en&a=home&id=22

备注:

  • 有无“www”

  • ?a = home& id = 22只是一个例子,我想追加
    整个查询字符串。

  • 在我发布网站之前需要'文件夹',因为我必须 在我的客户端服务器上测试它(例如www.mysite.pt/site_v2 /)。

先谢谢你的帮助,

佩德罗

2 个答案:

答案 0 :(得分:0)

我可以主要用正则表达式帮助你。我过去做了一些htaccess干预,但不知道细节。

www.mysite.pt/folder/?a=home&id=22 => www.mysite.pt/folder/index.php?lang=pt&a=home&id=22

regex
(www\.)?mysite\.pt/folder/\?(.*)
replace with
www.mysite.pt/folder/index.php?lang=pt&$1

www.mysite.pt/folder/en/?a=home&id=22 => www.mysite.pt/folder/index.php?lang=en&a=home&id=22

regex
(www\.)?mysite\.pt/folder/en/\?(.*)
replace with
www.mysite.pt/folder/index.php?lang=en&$1

我记得你指定重写规则的顺序很重要,AFAIK第一个获胜。

为什么呢?可能是多个正则表达式匹配

这两个正则表达式不是这种情况,而是需要注意的事情

答案 1 :(得分:0)

您是否只支持EN和PT?

我还希望你有很多图像,CSS,文件等。你还想要那些EN和PL版本吗?无论如何,让我们暂时关注脚本。在这里,您要为/somefolder/en/然后/somefolder/选择URI。如果您使用的是DOCroot .htaccess,那么您需要这样:

RewriteEngine On
RewriteBase   /

RewriteRule   ^(.*?)/en/$   $1/en/index.php?lang=en  [L,NS,QSA]
RewriteRule   ^(.*?)/$      $1/pl/index.php?lang=pt  [L,NS,QSA]

mod_rewrite documentation中查找L,NS,QSA标志。您需要NS标志来阻止子查询咬你。 QSA标志将lang参数与查询列表的其余部分合并。

如果您需要固定文件夹,请将(.*?)$1替换为固定文件夹名称。还要记住,HTML引用也需要工作。例如如果某个网页包含图片src="images/mygif.gif",那么这将从浏览器的角度解析为<same directory as HTML file>/images/mygif.gif,例如/folder/en/images/mygif.gif所以您需要找出映射这些内容的位置并添加相应的规则。