【问题标题】:mod_rewrite different languages part of urlmod_rewrite url 的不同语言部分
【发布时间】:2012-04-29 23:47:16
【问题描述】:

这是我当前的 .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 一起附加的方法吗?

【问题讨论】:

    标签: php apache mod-rewrite get


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2015-10-20
      • 1970-01-01
      相关资源
      最近更新 更多