Php mod rewrite和带有参数的完整url
我想得到完整的url和index.php的参数,用mod_rewrite重写 .htaccessPhp mod rewrite和带有参数的完整url,php,regex,apache,.htaccess,mod-rewrite,Php,Regex,Apache,.htaccess,Mod Rewrite,我想得到完整的url和index.php的参数,用mod_rewrite重写 .htaccess RewriteEngine On RewriteBase / RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d RewriteRule (.*)$ index.php?q=$1 [L,QSA] index.php仅适用于 print_r($_
RewriteEngine On
RewriteBase /
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule (.*)$ index.php?q=$1 [L,QSA]
index.php仅适用于
print_r($_GET);
当我尝试
domain.tld/http://asdf/asdf&s=1%3fb=3&c=34
我明白了
但我需要这样的东西:
Array
(
[q] => http://asdf/asdf&s=1%3fb=3&c=34 //some complicated url
)
有(简单的)方法吗?我找到了许多针对不同参数的解决方案,而不是针对一体机的解决方案。
对不起,我的英文是:)问题是,在您的示例URI中,查询字符串的格式不正确,导致Apache将字符串的一部分
(以&s=…`开头的部分)解释为查询字符串
本质上,这意味着Apache将其视为输入:
URI => http://asdf/asdf
Query String => s=1%3fb=3&c=34
重定向规则只对URI部分进行操作,然后通过QSA
标志附加查询字符串,因此您可以得到如下内容作为重写请求:
index.php?q=http://asdf/asdf&s=1%3fb=3&c=34
您需要首先对查询字符串进行URL编码。例如,这可能类似于由以下内容生成的内容:
$query_string = urlencode('http://asdf/asdf&s=1?b=3&c=34');
然后,为了防止Apache对其重新编码(双重编码),请在重定向规则中使用NE
标志:
RewriteRule (.*)$ index.php?q=$1 [L,NE,QSA]
问题是,在您的示例URI中,查询字符串的格式不正确,导致Apache将字符串的一部分(该部分以&s=…`开头)解释为查询字符串
本质上,这意味着Apache将其视为输入:
URI => http://asdf/asdf
Query String => s=1%3fb=3&c=34
重定向规则只对URI部分进行操作,然后通过QSA
标志附加查询字符串,因此您可以得到如下内容作为重写请求:
index.php?q=http://asdf/asdf&s=1%3fb=3&c=34
您需要首先对查询字符串进行URL编码。例如,这可能类似于由以下内容生成的内容:
$query_string = urlencode('http://asdf/asdf&s=1?b=3&c=34');
然后,为了防止Apache对其重新编码(双重编码),请在重定向规则中使用NE
标志:
RewriteRule (.*)$ index.php?q=$1 [L,NE,QSA]
您可以在根目录中使用此规则。htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} \s/+(\S+)
RewriteRule ^ /index.php?q=%1 [B,L]
您可以在根目录中使用此规则。htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} \s/+(\S+)
RewriteRule ^ /index.php?q=%1 [B,L]
我忘了:url来自互联网-我不知道我得到了什么。我忘了:url来自互联网,我不知道我得到了什么。所以urlencode是没有用的。仅供参考,这个问题非常棘手,%{THE_REQUEST}
和flagB
在这里扮演着非常重要的角色。仅供参考,这个问题非常棘手,%{THE_REQUEST}
和flagB
在这里扮演着非常重要的角色。