Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
Php 如何用问号重写url?_Php_Regex_Apache_Mod Rewrite_Query String - Fatal编程技术网

Php 如何用问号重写url?

Php 如何用问号重写url?,php,regex,apache,mod-rewrite,query-string,Php,Regex,Apache,Mod Rewrite,Query String,是否可以重写带有问号的url 比如说, http://localhost/mysite/search?tag=mars 变成这样, index.php?url=search&tag[key_name]=mars 我试过了,但一点用都没有 RewriteRule ^search?tag=([a-zA-Z0-9\-]+)/?$ index.php?url=search&tag[key_name]=$1&type=tag [L,QSA] 有什么建议吗 编辑: 对于%1

是否可以重写带有问号的url

比如说,

http://localhost/mysite/search?tag=mars
变成这样,

index.php?url=search&tag[key_name]=mars
我试过了,但一点用都没有

RewriteRule ^search?tag=([a-zA-Z0-9\-]+)/?$  index.php?url=search&tag[key_name]=$1&type=tag [L,QSA]
有什么建议吗

编辑:

对于
%1

RewriteCond %{QUERY_STRING} (?:^|&)tag=([^&]+)
RewriteRule ^search$ index.php?url=search&tag\%5Bkey_name\%5D=%1&type=tag [L]
结果,

print_r($_GET);

Array
(
    [url] => search
    [tag] => Array
        (
            [key_name] => 
        )

    [type] => tag
)
print_r($_GET);

Array
(
    [url] => search
    [tag] => Array
        (
            [key_name] => tag=mars
        )

    [type] => tag
)
对于
%0

RewriteCond %{QUERY_STRING} (?:^|&)tag=([^&]+)
RewriteRule ^search$ index.php?url=search&tag\%5Bkey_name\%5D=%0&type=tag [L]
结果,

print_r($_GET);

Array
(
    [url] => search
    [tag] => Array
        (
            [key_name] => 
        )

    [type] => tag
)
print_r($_GET);

Array
(
    [url] => search
    [tag] => Array
        (
            [key_name] => tag=mars
        )

    [type] => tag
)

无法在
重写规则
中匹配查询字符串。您必须改用
rwritesecond

RewriteCond %{QUERY_STRING} (?:^|&)tag=([^&]+)
RewriteRule ^search$ index.php?url=search&tag\%5Bkey_name\%5D=%1&type=tag [L]
在这里:

  • [
    ]
    编码为
    %5b
    %5D
  • \%
    用于转义文本
    %
    字符
  • %0
    <代码>%9是在
    RewriteCond
    子句中匹配/捕获的字符串。这正是您使用
    $0
    <代码>9美元用于
    重写规则
  • QSA
    标志不是必需的
  • (^ |和)
    匹配输入的开头(例如在
    tag=mars&foo=bar
    )或
    (例如在
    foo=bar&tag=mars
  • ?:
    使mod_rewrite无法捕获此组(其他此匹配将进入
    %1
    ,下一个进入
    %2
    ,等等)
您的PHP脚本将获得:

$_GET["url"]  : search
$_GET["tag"]  : Array([key_name] => mars)
$_GET["type"] : tag

%{QUERY\u STRING}
与路径分开处理。使用
RewriteCond
。可能重复感谢您的回答。我刚试过,但是
mars
没有被传递到
键的名称中。
%1
是什么意思?感谢您的更新。我在
key\u name
中仍然一无所获。。。我不明白!你能做一个
var\u转储($\u GET)
并发布结果吗?谢谢。我已经把结果放在上面的编辑中了。使用
%0
,我得到了一个有趣的结果。我认为这与
(?:^ |&)tag=([^&]+)
有关。我能问一下-什么是
(?:^ |&)
([^&]+)
意思吗?