1

URL を処理するために mod_rewrite の RewriteMap ディレクティブを使用しています。私の RewriteMap プログラムは PHP スクリプトであり、すべて正常に動作しています。わかりやすい URL を PHP プログラム + ID にマップできます。とにかく、私がやりたいことは、特定の URL に対して 301 リダイレクトを返すことです。たとえば、誰かが URL を入力した場合:

http://www.example.com/directory1

次に、RewriteMap プログラムに 301 リダイレクトを送信させたい

http://www.example.com/directory1/ (末尾のスラッシュ)

その後、再び私のプログラムに入り、PHP スクリプトにマップされます。ステートメントの最後に [R=301] を追加しようとしましたが、これはリクエストをハングアップさせるだけです。私のスクリプトの基本的なロジックは次のとおりです。

if ($input_url == "/directory1") {
    echo "/directory1/ [R=301]\n"; // これは機能しません...ハングするだけです
}
else if ($input_url == "/directory1/") {
    echo "/myprogram.php?id=1\n";
}

何か案は?

4

2 に答える 2

1

RewriteCondの-dテストは、Sridharの場合のために特別に設計されています。ファイルシステムにディレクトリが存在するかどうかをテストします。trueの場合、および末尾にスラッシュがない場合は、リダイレクトを適用できます。これは次のようになります。

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301]

この場合、RewriteMap(prg)は必要ありません。

于 2009-12-18T21:38:42.820 に答える
0

それはあなたがやりたい方法では不可能です。ただし、追加のルールを使用して、末尾のスラッシュなしで URL のすべてのリクエストをリダイレクトできます。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301]
于 2009-12-10T06:55:39.263 に答える