mod_rewrite不同语言的url部分

时间:2012-04-18 14:27:45

标签: php apache mod-rewrite get

这是我目前的.htaccess:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f [NC,OR]
RewriteCond %{REQUEST_FILENAME} !-d [NC]

RewriteRule ^$ /launcher/index.html [L]

RewriteRule ^en/admin$ /main/index.php?lang=en&action=acp [L]
RewriteRule ^sp/admin$ /main/index.php?lang=sp&action=acp [L]

RewriteRule ^en/(.*)$ /main/$1?lang=en [L]
RewriteRule ^sp/(.*)$ /main/$1?lang=sp [L]

我有一个启动器屏幕(工作正常),我的网站PHP文件是main / index.php。我使用$ _GET将有关哪个页面的信息传递给我的index.php,即:index.php?action = download& file = 123。我将使用两个根级别/ en /用于英语,/ sp /用于西班牙语。这些传递给index.php为?lang = en或?lang = sp。

我有2个问题我无法解决;

  • 我的规则有一个奇怪的失败不一致。做我正在做的事情可能有更好的方法。如果有人能告诉我如何,我将非常感激。我是mod_rewrite的完整菜鸟

  • 当我使用?variable =值在URL的末尾添加更多内容时,它会在?lang = en或?lang = sp之后发生。这意味着第二个问号导致$ _GET出现故障,并且那些$ _GET传递的变量将丢失。我需要一种方法将两个$ _GET与mod_rewrite一起追加?

1 个答案:

答案 0 :(得分:0)

要解决您的第二个问题,您是否考虑过使用QSA标志?引用docs

  

'qsappend | QSA'(查询字符串追加)

     

此标志强制重写引擎将替换字符串的查询字符串部分附加到现有字符串,而不是替换它。如果要通过重写规则向查询字符串添加更多数据,请使用此选项。

关于第一个问题,您可以将ensp合并为一个规则,如下所示。但是,这是否是一种改进是有争议的。

RewriteRule ^(en|sp)/(.*)$ /main/$2?lang=$1 [L,Q]