【问题标题】:Apache redirect of multiple PHP pages based on variable基于变量的多个PHP页面的Apache重定向
【发布时间】:2021-11-13 14:10:12
【问题描述】:

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

旧架构类似于:

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

导入到新网站的格式为:

https://mynewdomain/works/12345

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

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

有什么办法吗?

【问题讨论】:

    标签: php apache .htaccess redirect


    【解决方案1】:
    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=&lt;something&gt; 形式的请求到您的PHP 脚本/manage-old-redirects.php,您可以在其中执行必要的查找以根据需要构建重定向。

    【讨论】:

    • 这是一个旧档案,所以我有 35,000 多个项目要重定向到一个新域 - 所以执行脚本重定向可能是最好的主意。谢谢!
    • @walterhpdx 嗯,.htaccess 中的 35,000 次重定向将是过多的(如果同样的服务器/虚拟主机也用于新站点,则明确的“否”)。我已经用必要的 .htaccess 指令更新了我的答案,以将此类请求重写为将处理该请求的 PHP 脚本。
    • 谢谢@MrWhite - 我想这太多了。我喜欢你的方法,所以现在我正在搜索重定向 PHP 脚本。谢谢!
    • 对于其他正在寻找这个的人,我根据@MrWhite 的指令创建了一个名为 mod.php 的新文件,其中我有: mynewdomain/works/$sid"); exit(); ?>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多