php - 基于变量的多个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
有没有办法做到这一点?
解决方案
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
,您可以在其中执行必要的查找以根据需要构造重定向。
推荐阅读
- c++ - glGetnUniformfv 无缘无故崩溃?
- c# - 最终产品用户无法创建 Excel 互操作实例
- java - 将带中断的循环重写为 lambda
- angular - 无法分配给引用或变量 - ivy
- c# - -SDR 的替代正则表达式?
- c# - 如何避免频繁 HttpRequest 导致的 DbContext 线程问题?
- c++ - 我如何解释安全布尔成语的这种应用?
- ruby-on-rails - 我的用于启动 Rails 应用程序的 shell 脚本似乎没有运行代码 `cd` 预计会运行?
- python-3.x - 如何在没有按钮的情况下更新 tkinter 中的选项菜单?
- sql - 如果值是 SIMILAR 不是 EXACT,如何关联来自不同表的两列?