Redirect 301 /viewstory.php?sid=20449 https://mynewdomain/works/12345
mod_alias Redirect 指令仅匹配 URL 路径,而不匹配查询字符串。要匹配此 URL,您需要使用 mod_rewrite 并检查 条件 中的 QUERY_STRING 服务器变量。例如:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^sid=20449$
RewriteRule ^viewstory\.php$ https://mynewdomain/works/12345 [QSD,R=301,L]
QSD 标志是从重定向响应中丢弃原始查询字符串所必需的。
我想将一个包含所有重定向的巨大 .htaccess 文件放在一起。
如果这就是您将旧主机用于...重定向到不同服务器/虚拟主机上的新站点的全部内容,这可能没问题。不过,您有多少个单独的重定向?
但是,通常情况下,如果您在同一服务器/虚拟主机上维护新旧站点,那么在您的应用程序中实现 100 次(或 1000 次)重定向比 .htaccess(甚至服务器配置)更有效)。并且仅当您的应用程序认为该请求会导致 404 时。这是为了确保正常的网站访问者不会受到重定向逻辑的任何影响(.htaccess 会针对每个请求进行处理)。
或者,您在内部将所有/viewstory.php?sid=<something> 形式的请求重写(在./htaccess 中)到一个单独的脚本,并且该脚本处理重定向。
例如:
RewriteEngine On
# Rewrite all requests of the form "/viewstory.php?sid=<something>" to a PHP script
RewriteCond %{QUERY_STRING} ^sid=.
RewriteRule ^viewstory\.php$ manage-old-redirects.php [L]
在上面我们内部重写(不重定向)所有/viewstory.php?sid=<something> 形式的请求到您的PHP 脚本/manage-old-redirects.php,您可以在其中执行必要的查找以根据需要构建重定向。