2

次のような醜いものからURLを美しくしようとしています:

www.domain.com/lookup.php?firstname=jack&middlename=ron&lastname=paul

www.domain.com/n/jack/ron/paul

サーバー上で他のいくつかの書き換えを行っていますが、404 が発生するため、これは気に入らないようです。これが私が試していることです:

RewriteRule ^/n/(.*)/(.*)/(.*)$ lookup.php?firstname=$1&middlename=$2&lastname=$3

私は何が欠けていますか?なぜそれがうまくいかないのですか?

このようなより単純なものはうまくいきます:

RewriteRule ^article/(.*)$ articles.php?article_id=$1

もう 1 つ複雑な処理を行うには、さらに何を行う必要がありますか?

4

2 に答える 2

1

htaccess ファイルにルールがあるため、これは機能しません。URI が htaccess ファイルの書き換えルールによって処理される場合、先頭のスラッシュ (または「プレフィックス」) は常に取り除かれます。つまり、次のことを意味します。

# here-------v
RewriteRule ^/n/(.*)/(.*)/(.*)$ lookup.php?firstname=$1&middlename=$2&lastname=$3

htaccess ファイル内のすべての URI でスラッシュが取り除かれているため、パターンの先頭のスラッシュにより一致しなくなります。htaccess ファイルの書き換えルールは、基本的に<Directory>コンテナー内のルールに似ています。そのスラッシュを取り除いてみてください。

于 2013-02-28T22:07:21.603 に答える
0

あなたの httpd 設定をもっと見る必要がありますが、ここにいくつかのメモがあります:

  1. ルールの最後に [L,R] または [L,R=301] または [L,R=302] がないようです (これがセグメントの最後のルールである場合は L であると思われます)は)。
  2. あなたの .* 正規表現は貪欲すぎるかもしれません - あなたが望むようにそれらが一致するかどうかはわかりません.
于 2013-02-28T20:02:01.870 に答える