首页 > 解决方案 > htaccess 用问号完整 url 重写

问题描述

大家好,我想传递用 get.php 编写的所有内容?url = 参数(包括问号和特殊字符)。我有 get.php 文件的文件内容:

$url = $_GET['url'];
print($url);

.htaccess 文件:

RewriteEngine On
RewriteBase /
RewriteRule ^get/(.*)/?$ /get.php?url=$1 [L]

当我这样做时,我可以达到问号。示例:http ://example.com/get/http://example.com?id=1&ad=mahmut

我得到了这个结果:http ://example.com

我怎么解决这个问题?我在网站上尝试了很多示例,但都失败了。

标签: regex.htaccessmod-rewrite

解决方案


诀窍是不要使用RewriteRule,因为您之前只会获得 URI 部分?

您应该为此使用RewriteCondwith变量:THE_REQUEST

Options -MultiViews
RewriteEngine On

RewriteCond %{QUERY_STRING} !(^|&)url= [NC]
RewriteCond %{THE_REQUEST} \s/+get/(\S*)\s [NC]
RewriteRule ^ get.php?url=%1 [L,QSA]

THE_REQUEST变量表示 Apache 从您的浏览器收到的原始请求,并且在执行其他重写指令后它不会被覆盖。此变量的示例值为GET /index.php?id=123 HTTP/1.1


推荐阅读