1

2つのアクションにhtaccessを使用したい.コードがあります

RewriteRule ^File-(.+).php$ FileviewerID.php?x=$1
RewriteRule ^File-(.+).php$ File.php

しかし、このコードは一緒に実行できません

ファイルIDをビューアーに送信してdbに保存したいのですが、試験ユーザーにFile.phpを表示して、このファイル名を送信します> www.sitename.com/File-256.phpで256をDBに保存し、File.phpを表示します。 htaccessでそれをやりたいだけです。

4

2 に答える 2

1

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
}
于 2012-12-22T14:38:48.477 に答える
1

ID をデータベースに保存するには、FileviewerID.php ページを最初にロードする必要があります。

FileviewerID.php ファイルに file.php へのリダイレクトを配置する必要があります。

header("Location: File.php");
exit();
于 2012-12-22T14:40:08.270 に答える