3

htaccess私は学習の過程で次のように書いた:

RewriteRule ^/test(a-zA-z)\.htm$ /test$1.htm

そして、test2.htmまだにマップされますtest1.htm

エスケープされていない$1ため、は変数プレースホルダーとして適切に扱われていないと思います。$これを書く正しい方法は何ですか(テストの目的で、test2.htmがそれ自体にマップされるようにtest2.thm

最終的に、私は次のようなマップを作成しようとしています。

domain.com/$1/$2domain.com/?a=$1&b=$2

また

domain.com/$1domain.com/?a=$1

最初のURLが2番目のURLにマップされているときに、ブラウザーのURLを変更したくありません。私はこれがC# Global.asaxファイル(を使用してroutes.MapRoute)で可能であることを知っていますが、これをで発生させる方法がわかりませんphp

4

3 に答える 3

2

最も複雑なものからそれほど複雑でないものへと、除去を進めます。

  • 最初の2つのパラメータを処理し、次にすべての変数QSAを保持するためのディレクティブ(重要) 、次にすべてを停止するためのディレクティブ、GETL
  • 次に、最初に1つのパラメーターを処理し、次にすべての変数QSAを保持するためのディレクティブ(重要) 、次にすべてを停止するためのディレクティブを処理します。GETL

それはうまくいくはずです:

RewriteRule ^/([a-zA-z0-9]+)/([a-zA-z0-9]+)$ /?a=$1&b=$2 [QSA,L]
RewriteRule ^/([a-zA-z0-9]+)$ /?a=$1 [QSA,L]

あっ、そういえば:

そしてそれが十分でない場合:

2つのヒント:

ホストされた環境にいない場合(=それが独自のサーバーであり、ファイルだけでなく仮想ホストを変更できる場合)、ディレクティブを使用してみてください。このような問題を追跡するのに役立ちます。.htaccessRewriteLog

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

正規表現をチェックするための私のお気に入りのツール:

http://www.quanetic.com/Regex(preg(PCRE)の代わりにereg(POSIX)を選択することを忘れないでください!)

于 2012-07-23T08:27:04.813 に答える
1

For me this was the simplest article I found which really helped me to figure out what I needed and worked in the end, so I'll share it here and try to use the terms which makes sense to me.

http://www.workingwith.me.uk/articles/scripting/mod_rewrite

RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L]

The right hand side (index.php?page=$1) is the destination which is hidden from the browser.

The left hand side is the mapping rule.

The variable parsed from the left - $1 need not be right at the end of the string and can be anywhere in the middle, for example, /CHECK/?VAR=$1MORETEXT or if there are more variables to parse from the left, it could be "/CHECK/?VAR=$1MORETEXT$2".

The "/?" is optional, if it is desired for the destination URL to not have a "/" at the end, don't include it and just end with the $ like ^page/([^/\.]+)$

The [L] is useful because it stops the htaccess from wasting time reading onwards once a matching Rule is found.

于 2012-07-24T11:59:21.790 に答える
1

範囲のようなものを書きたいときは、を使用する必要があります[]。例えば:

RewriteRule ^/test([a-zA-z0-9]+)\.htm$ /index.php?data=$1  [L]
于 2012-07-23T04:59:30.193 に答える