Mod-rewrite 无法以这种方式按顺序提供文件。相反,它将通过规则列表进行,如果第一个规则之后的另一个规则匹配FileviewerID.php
,它将随后被重写。因此,虽然可以使用 mod_rewrite 来匹配请求中的多个规则,但它不会执行分支到多个请求。
确实,处理这个问题的正确方法是在你的 PHP 代码中,而不是试图让 Web 服务器为你做这件事。
在成功写入数据库后FileviewerID.php
,调用header()
PHP 重定向到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
}