現在、Mod Rewrite Regex が動作しています。
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*/)?((?:cmd)[^/]*)/((?!(?:cmd)[.+]*)(.+)) $1?$2=$3&%1 [L]
この正規表現は次の URL を受け取り、すぐ下の URL に変換します。
www.site.com/cmd1/param/cmd2/param2/stillparam2
そしてそれをwww.site.com/index.php?cmd1=param&cmd2=param2/stillparam2
これで問題なく動作しますが、別の否定先読みアサーションを作成して、URL ブロック (/texthere/
パラメーター) にアンダースコアが含まれないようにしたいと考えています。無効な文字列は次のようになりますwww.test.com/cmd/thing/getparam_valuehere
。正規表現はcmd/thing
をキーと値のペアとして解析し、残りの文字列を無視する必要があります。次に、別の RewriteRule を作成して、アンダースコアを含む URL のブロックを別の URL パラメーターとして追加します。次の URL 変換が行われます。
www.test.com/cmd/param1/cmd2/directory/param2/sortorder_5
www.test.com?cmd=param1&cmd2=directory/param2&sortorder=5
十分に明確でない場合はお知らせください。どんな助けでも素晴らしいでしょう。
NB: 既に存在するものの中にネストされた否定的な先読みを使用(?!(?!))
しようとしましたが、2 つの否定的な先読みを使用しようとしました|
が、どちらの解決策も機能しませんでした。もっと根本的に間違っているのではないかと思いました。
皆さんありがとう。
編集:次のことも試しました-これは本当にうまくいくと思いました(しかし、明らかにうまくいきませんでした!)
RewriteRule ^(.*/)?((?:cmd)[^/]*)/((?!(?:cmd)[.+]*)(?![.+]*(?:_)[.+]*)(.+)) $1?$2=$3&%1 [L]
これにより、次のことが行われます。
www.test.com/cmd/param1/sortorder_1/
に変換します
www.test.com?cmd=param1/sortorder_1/
代わりに次のようになる場合: www.test.com?cmd=param1&sortorder=2/
. /sortorder_2/
変換するルール&sortorder=2
はまだ作成されていませんが、私の言いたいことがわかると思います)。