mod-rewrite は、このように順番にファイルを提供することはできません。代わりに、ルールのリストを処理し、最初のルールが一致した後に別のルールが一致した場合FileviewerID.php
、その後に書き換えられます。そのため、mod_rewrite を使用してリクエストの複数のルールに一致させることはできますが、複数のリクエストへの分岐は実行されません。
実際、これを処理する適切な方法は、Web サーバーに処理をさせるのではなく、PHP コードで行うことです。
でデータベースへの書き込みが成功したら、PHP をFileviewerID.php
呼び出しheader()
て にリダイレクトしFile.php
ます。
// Fileviewer.php
// Write to database was successful, redirect to File.php...
header("Location: http://example.com/File.php");
exit();
コメント後の更新:
以外のファイルでこれを機能させるには.php
、PHP を使用してデータベースに格納し、正しいリダイレクトを処理できますが、Apache のリダイレクトからさらに多くの情報を取得する必要があります。番号だけでなく、ファイル拡張子も取得する必要があります。
# Capture both the number and the extension
RewriteRule ^File-(\d+)\.([A-Za-z]+)$ FileviewerID.php?x=$1&ext=$2
PHPFielviewerID.php
で、データベース アクションを処理し、から収集した拡張子を使用してリダイレクトします$_GET['ext']
。
// FileviewerID.php:
// Store file id in database from $_GET['x'] (hopefully using prepared statements)
// Then redirect using the file extension from $_GET['ext'], which holds an alphabetic string like "php" or "js"
// Verify that the extension is alphabetic
// Consider also checking it against an array of acceptable file extensions for
// more reliable redirects.
if (preg_match('/^[a-z]+$/i', $_GET['ext'])) {
header("Location: http://example.com/File.{$_GET['ext']}");
exit();
}
else {
// Redirect to some default location for an invalid extension
}