1

我试图在这里找到一些例子,但它们都不适合我。我是一个使用 RE 的新手

我需要一些关于 .htacess > RewriteRule 的帮助。我怎么能做到这一点?

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/)。

在此先感谢您的帮助,

佩德罗

4

2 回答 2

0

您只想支持 EN 和 PT 吗?

我还希望你有很多图像、CSS、文件等。你也想要这些的 EN 和 PL 版本吗?无论如何,让我们现在专注于脚本。在这里,您要获取 URI /somefolder/en/,然后 /somefolder/。如果您使用的是 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 文档中查找 L、NS、QSA 标志。你需要 NS 标志来阻止子查询咬你。QSA 标志将该lang参数与查询列表的其余部分合并。

如果您想要一个固定文件夹,则将(.*?)and替换$1为固定文件夹名称。还要记住,您的 HTML 引用也需要正常工作。例如,如果一个页面包含一个图像src="images/mygif.gif",那么这将要么<same directory as HTML file>/images/mygif.gif从浏览器的角度解析,例如,/folder/en/images/mygif.gif所以你需要弄清楚在哪里映射这些图像并添加相应的规则。

于 2012-06-27T17:03:18.337 回答
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 第一个获胜。

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

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

于 2012-06-27T14:36:15.373 回答