简体   繁体   English

激活modrewrite后,如何处理PHP中的GET-Parameter?

[英]How to handle GET-Parameter in PHP when modrewrite is activated?

I've a little problem. 我有点问题 I use modrewrite to load language-content dynamically into webpage... 我使用modrewrite将语言内容动态加载到网页中...

example: 例:

www.mydomain.xyz/en (the english version) www.mydomain.xyz/fr (the french version) ... www.mydomain.xyz/zh(英文版)www.mydomain.xyz/fr(法语版)...

My .htaccess: 我的.htaccess:

 RewriteRule ^en$ index.html?lang=en

But: 但:

www.mydomain.xyz/en?foo=bar www.mydomain.xyz/en?foo=bar

and

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

doesn't work... the GET-Parameter is ignored. 不起作用... GET-Parameter被忽略。 What I have to do? 我该怎么办?

  • it works, with www.meinedomain.xyz/en.html?foo=bar but I don't want to display any Extensions. 它可以与www.meinedomain.xyz/en.html?foo=bar一起使用,但我不想显示任何扩展名。

Use QSA flag: 使用QSA标志:

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

To make this work for en and fr use this: 要使此功能适用于en和fr,请使用以下命令:

RewriteRule ^(en|fr)/?$ index.html?lang=$1 [L,QSA]
  • QSA (Query String Append) flag preserves existing query parameters while adding a new one. QSA (查询字符串追加)标志在添加新参数时保留了现有查询参数。

Simply add [QSA] to your rewrite rule: 只需将[QSA]添加到您的重写规则中:

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

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

You need the [QSA] instruction right after your rewrite rule 重写规则之后,您需要[QSA]指令

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

QSA is "query string append" and preserves query strings on rewrite QSA是“查询字符串追加”,并在重写时保留查询字符串

I'd also recomment using (/|$) instead of just $, or calling yourdomain.com/ensomefile.php would also result in rewriting 我也建议使用(/ | $)而不是仅使用$,或者调用yourdomain.com/ensomefile.php也会导致重写

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM