0

这是我当前的 .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/ 表示西班牙语。这些以 ?lang=en 或 ?lang=sp 的形式传递给 index.php。

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

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

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

4

1 回答 1

0

为了解决您的第二个问题,您是否考虑过使用 QSA 标志?引用文档

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

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

关于第一个问题,您可以将enand组合sp成一个规则,如下所示。不过,这是否是一种改进还有待商榷。

RewriteRule ^(en|sp)/(.*)$ /main/$2?lang=$1 [L,Q]
于 2012-04-19T11:15:42.473 回答