不能用“?”在 URL 因为 .htaccess

Can't use "?" in URL because .htaccess

我的 .htaccess 中有以下代码:

RewriteEngine On
Options -MultiViews
Options +FollowSymlinks

RewriteBase /testUrl/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?page= [L]

RewriteRule ^(.*)\/(\?.*)?$  [R=301,L]

然后我使用 $_GET['page'] 方法捕获参数。

这个有效:

localhost/testUrl/param1/param1

这行不通

http://localhost/testUrl/param1/param1?newparam=test&nextparam=test1

但这行得通:

http://localhost/testUrl/param1/param1&newparam=test&nextparam=test1

我需要使用 /param1/param2?newparam=etc

来处理第二个示例...

有什么建议吗?非常感谢大家

那是因为您的重写规则不包含 QSA 标志 告诉 apache 附加查询字符串。

RewriteRule ^(.*)$ index.php?page= [QSA,L]

RewriteRule ^(.*)\/(\?.*)?$  [QSA,R=301,L]

要阅读有关重写 mod 标志的更多信息,请转到 - http://httpd.apache.org/docs/2.4/rewrite/flags.html