Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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重写规则将带有查询字符串的页面重定向到外部网页_Apache_Mod Rewrite - Fatal编程技术网

如何使用APACHE重写规则将带有查询字符串的页面重定向到外部网页

如何使用APACHE重写规则将带有查询字符串的页面重定向到外部网页,apache,mod-rewrite,Apache,Mod Rewrite,我正在尝试将登录页重定向到外部安全服务。验证凭据后,此服务将使用referer url将用户返回到原始页面,如下例所示: http://{IP NUMBER}/MyWiki/index.php?title=Special:UserLogin&returnto=Main_Page 或者,对网站中查询字符串中包含Special:UserLogin的页面的任何调用都需要重定向到: https://login.security.server.com/test/UI/Login?service=

我正在尝试将登录页重定向到外部安全服务。验证凭据后,此服务将使用referer url将用户返回到原始页面,如下例所示:

http://{IP NUMBER}/MyWiki/index.php?title=Special:UserLogin&returnto=Main_Page
或者,对网站中查询字符串中包含Special:UserLogin的页面的任何调用都需要重定向到:

https://login.security.server.com/test/UI/Login?service=DSSEC&goto=http://{IP NUMBER}/MyWiki/index.php/Special:UserLogin
https://login.security.server.com/test/UI/Login?service=DSSEC&goto=http://123.45.67.89/MyWiki/index.php%3ftitle%3dSpecial%3aUserLogin%26returnto%3dMain_Page

我一直在用RewriteCond和RewriteRule进行测试,但运气不好。

你想要这样的东西吗

RewriteEngine On
RewriteCond %{REQUEST_URI} Special:UserLogin [OR]
RewriteCond %{QUERY_STRING} Special:UserLogin
RewriteCond ?#%{QUERY_STRING} ([^#]+)#([^#]+)
RewriteRule ^ https://login.security.server.com/test/UI/Login?service=DSSEC&goto=http://%{SERVER_ADDR}%{REQUEST_URI}%1%2 [L,B,NE]
好吧,这看起来有点让人困惑,但事情是这样的

  • 检查请求URI或查询字符串中是否有
    Special:UserLogin
  • 标记、URI和查询字符串创建反向引用匹配(这非常重要)
  • 将请求重定向到
    https://login.security.server.com/test/UI/Login
    ,但使用前一个条件中的反向引用来构建
    goto=
    参数,并使用
    B
    标志,该标志由URL编码反向引用。这样,结果就是一个完整的URL,以及一个经过URL编码的查询字符串。(存在
    NE
    标志以确保
    %
    符号本身不会被双重编码)
  • 根据这些规则,请求:

    /MyWiki/index.php?title=Special:UserLogin&returnto=Main_Page
    
    将被重定向到:

    https://login.security.server.com/test/UI/Login?service=DSSEC&goto=http://{IP NUMBER}/MyWiki/index.php/Special:UserLogin
    
    https://login.security.server.com/test/UI/Login?service=DSSEC&goto=http://123.45.67.89/MyWiki/index.php%3ftitle%3dSpecial%3aUserLogin%26returnto%3dMain_Page
    
    正如您所看到的,查询字符串
    ?title=Special:UserLogin&returnto=Main\u Page
    被编码到
    %3ftitle%3dsspecial%3userlogin%26returnto%3dman\u Page
    ,这样login.security.server.com就不会将其误认为自己的查询字符串。相反,他们的登录服务将看到goto参数:

    http://123.45.67.89/MyWiki/index.php?title=Special:UserLogin&returnto=Main_Page
    
    完好无损