apache - .htaccess 不会转义 RewriteRule 上的问号
问题描述
我有一个旧类型的单点登录网站。父网站使用如下 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。您只能匹配index.php
RewriteRule 中的 url 路径(即:)。?
符号后的 URL 部分是 URL QueryString。您将需要匹配%{QUERY_STRING}
.RewriteCond
RewriteEngine on
RewriteCond %{QUERY_STRING} ^gid=([^&]+)&u=([^&]+)&id=([^&]+)$ [NC]
RewriteRule ^index.php$ /login/%1/%2/%3? [L,R]
推荐阅读
- ios - SwipeCellKit 动作不会执行 segue
- linux - 从 pg_basebackup 恢复
- javascript - React Native Elements ListItem 不会显示切换按钮
- git - 当 git status 中没有显示未跟踪的文件时,为什么 git 会抱怨未跟踪的文件?
- testing - Mac 上 Katalon Studio 中 Appium 目录的正确设置是什么?
- c# - 将变量传递给另一个类中的方法
- powershell - powershell 将现有电子邮件从文本格式更改为 html 正文格式
- c# - 与基类具有相同接口的子类具有新的关键字
- javascript - 玉/哈巴狗的进口声明
- scala - Scala:期待 Try[Stream[(String)]] 但正在给 Try[String]