0

に書き換えようとしhttp://www.mydomain.com/xxxxxています。http://www.mydomain.com/page1.php?h=xxxxx

このルールを使っています

rewrite /([a-z1-9]+)$ /page1.php?h=$1 last;

正しくリダイレ​​クトしますpage1.php

しかし、リンクをクリックし(page1.php?h=xxxxx)て移動した後(page2.php?h=xxxxx)

同じページにリダイレクトされ、(page1.php?h=xxxxx)入力されません(page2.php?h=xxxxx)

理由がわかりません、誰か助けてくれませんか?

ありがとう

4

1 に答える 1

0

nginxの場所が負の一致を許可していないため、以下は明らかに機能しません。(参照: https://stackoverflow.com/a/16304073/398519 )

セットアップを切り替えることができない場合は、次のような場所が必要になります。

location !~* \.php$ {
    rewrite /([a-z1-9]+)$ /page1.php?h=$1 last;
}

私は(テストされていない)、それが一致.phpしたり、他のアイテムと一致したりしてはならず.ext、webroot部分からのみプルする必要があると信じています。残念ながら、現時点ではテストできません。


まず第一に、最初のルールがあいまいすぎます。1ページ目と2ページ目を区別する何かが必要です。

そのような: http://www.domain.com/p1/xxxxxxx

そうすれば、p1 / p2 などで解析し、その処理方法を知ることができます。完全を期すために、ルールの例をいくつか示します。

rewrite /p1/([a-z1-9]+)$ /page1.php?h=$1 last;
rewrite /p2/([a-z1-9]+)$ /page2.php?h=$1 last;

元のルールを使用する場合は、ファイル チェックを追加するか、正規表現を一致しないように変更する必要があります。または.php、ルートの場所の前にセクションを作成してそこにトラップされる.whatever 以外に、nginx でこれを行う方法がわかりません。location 最初。

于 2013-11-13T16:02:43.957 に答える