当modrewrite被激活时,如何在PHP中处理GET-Parameter?

时间:2014-02-11 13:42:43

标签: php .htaccess mod-rewrite

我有点问题。 我使用modrewrite将语言内容动态加载到网页中......

示例:

www.mydomain.xyz/en(英文版) www.mydomain.xyz/fr(法文版) ...

我的.htaccess:

 RewriteRule ^en$ index.html?lang=en

可是:

www.mydomain.xyz/en?foo=bar

<?php
 if(isset($_GET["foo"])) {
   echo "Yeah! There is some stuff!";
 }
 ?>

不起作用......忽略GET参数。我该怎么办?

  • 它可以使用 www.meinedomain.xyz/en.html?foo=bar ,但我不想显示任何扩展名。

3 个答案:

答案 0 :(得分:2)

使用QSA标志:

RewriteRule ^en$ index.html?lang=en [L,QSA]

要使用en和fr工作,请使用:

RewriteRule ^(en|fr)/?$ index.html?lang=$1 [L,QSA]
  • QSA(查询字符串追加)标记在添加新查询参数时保留现有查询参数。

答案 1 :(得分:1)

只需将[QSA]添加到重写规则中:

RewriteRule ^en$ index.html?lang=en [QSA];

https://wiki.apache.org/httpd/RewriteQueryString

答案 2 :(得分:0)

您需要在重写规则

之后立即执行[QSA]指令

http://httpd.apache.org/docs/current/mod/mod_rewrite.html

QSA是“查询字符串追加”并在重写时保留查询字符串

我还建议使用(/ | $)而不是$,否则调用yourdomain.com/ensomefile.php也会导致重写

RewriteRule ^en(/|$) index.html?lang=en [QSA]