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
)

について%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] => tag=mars
        )

    [type] => tag
)
4

1 に答える 1

2

クエリ文字列は内部で一致させることはできませんRewriteRuleRwwriteCond代わりに使用する必要があります:

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

ここ:

  • [および]としてurlencodedされ%5bます%5D
  • \%%リテラル文字をエスケープするために使用されます
  • %0...は、句%9で一致/キャプチャされた文字列です。RewriteCondこれはあなたが使う方法です$0...$9RewriteRule
  • 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
于 2013-02-23T18:21:52.507 に答える