首页 > 解决方案 > 基于变量的多个PHP页面的Apache重定向

问题描述

我有一个当前站点,尽管它已被弃用,并且所有内容都已移至另一个站点,但我正在跟上它。因为已经一年了,我想开始将人们从旧站点重定向到新站点,我可以通过一个简单的重定向来完成。但是,我有个别文章希望重定向到新网站上的文章。

旧模式类似于:

https://mydomain/viewstory.php?sid=20449

这被导入到新站点:

https://mynewdomain/works/12345

数据在我的 MySQL 数据库中,带有新旧 URL,我想将一个.htaccess包含所有重定向的巨大文件放在一起。但目前我输入的代码不起作用。我正在使用的代码是:

Redirect 301 /viewstory.php?sid=20449 https://mynewdomain/works/12345

有没有办法做到这一点?

标签: phpapache.htaccessredirect

解决方案


Redirect 301 /viewstory.php?sid=20449 https://mynewdomain/works/12345

mod_aliasRedirect指令仅匹配 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在每个请求上都进行处理)。

./htaccess或者,您在内部将表单的所有请求重写(in )/viewstory.php?sid=<something>到单独的脚本,并且该脚本处理重定向。

例如:

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,您可以在其中执行必要的查找以根据需要构造重定向。


推荐阅读