apache - .htaccess 不会转义 RewriteRule 上的问号

标签 apache .htaccess nginx mod-rewrite

我有一个使用旧类型单点登录的网站。父网站使用如下 URL 将用户引导至我的网站:

http://blabla.test/index.php?gid=abcd1234&u=bcanata&id=11472

我想将其重写为:

http://blabla.test/login/abcd1234/bcanata/11472

我创建了一个 .htaccess 文件如下:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^index.php?gid=(.*)&u=(.*)&id=(.*)$ login/$1/$2/$3 [L]

我尝试像这样转义 URL 中的问号:

RewriteRule ^index.php\?gid=(.*)&u=(.*)&id=(.*)$ login/$1/$2/$3 [L]

但是,不幸的是,这两个规则都不匹配并重写了 URL,我不明白为什么。

最佳答案

您不能匹配 RewriteRule 指令模式中的 url QueryString。您只能在 RewriteRule 中匹配 url 路径(即:index.php)。 ? 符号后的 url 部分是 URL QueryString。您需要匹配 RewriteCond 中的 %{QUERY_STRING} 变量。

RewriteEngine on

RewriteCond %{QUERY_STRING} ^gid=([^&]+)&u=([^&]+)&id=([^&]+)$ [NC]
RewriteRule ^index.php$  /login/%1/%2/%3? [L,R]

关于apache - .htaccess 不会转义 RewriteRule 上的问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50341099/

相关文章:

apache - Hive 版本模式

apache - 如何使用 Selenium RC 验证我们的服务器端重定向(301、302)?

java - ant中如何复制目录

php - 如何删除 = 和 ?来自 php 中的 URL

php - Apache - 浏览任何域 URL 都指向同一文件夹

java - 为什么我们需要apache通用日志 jar 来在Eclipse中安装spring框架

apache - 在 htaccess 中强制使用非 SSL 只能部分起作用

ruby-on-rails - 捆绑安装 - Ubuntu 上的 Rails

ruby-on-rails - 如何在 Nginx 中启用 TLS 1.2?

python - Angular前端,用于Flask API,全部在docker内部