Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess不';不要在重写规则上漏掉问号_Apache_.htaccess_Nginx_Mod Rewrite - Fatal编程技术网

Apache .htaccess不';不要在重写规则上漏掉问号

Apache .htaccess不';不要在重写规则上漏掉问号,apache,.htaccess,nginx,mod-rewrite,Apache,.htaccess,Nginx,Mod Rewrite,我有一个旧的单一登录类型的网站。父网站使用URL将用户发送到我的网站,如: 我想把它改写成这样: 我创建了一个.htaccess文件,如下所示: RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^index.php?gid=(.*)&u=(.*)&id=(.*)$ login/$1/$2/$3 [L] 我试图避开URL中的问号,如下所示: RewriteR

我有一个旧的单一登录类型的网站。父网站使用URL将用户发送到我的网站,如:

我想把它改写成这样:

我创建了一个.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查询字符串。您只能在RewriteRule中匹配url路径(即:
index.php
)。
符号后的Url部分是Url查询字符串。您需要在
RewriteCond
中匹配
%{QUERY\u STRING}
变量

RewriteEngine on

RewriteCond %{QUERY_STRING} ^gid=([^&]+)&u=([^&]+)&id=([^&]+)$ [NC]
RewriteRule ^index.php$  /login/%1/%2/%3? [L,R]
您真的应该开始阅读所使用工具的文档……查询字符串不是请求URL的一部分,您需要使用
RewriteCond
来测试和捕获它,您不能在
RewriteRule
中这样做。看看官方文件。作为典型的开源项目,它的质量非常好,并提供了很好的示例: