2

我们需要将 8000 个 URL 从旧网站 301 重定向到新网站。不幸的是,URL 之间没有关系,如下所示:

例如 http://www.URL1.com/content/default.asp?var_a=s2&var_b=8443&back=home TO http://URL2.co.uk/news/article/news-title-goes-here/

我们可以将所有重定向规则导入到 htaccess 文件中,也可以设置 mysql 数据库和 PHP 脚本来执行查找然后重定向。

考虑到条目的数量,从性能的角度来看,哪个是最好的下降路径?

如果 htaccess 能够完成任务,那么编写重定向的最佳方法是什么?

Redirect 301 /content/default.asp?var_a=s2&var_b=8443&back=home http://URL2.co.uk/news/article/news-title-goes-here/

或者

RewriteCond %{QUERY_STRING} ^var_a=s2$
RewriteCond %{QUERY_STRING} ^var_b=8443$
RewriteRule ^/content/default.asp$ http://URL2.com/news/article/news-title-goes-here/?  [L,R=301]

非常感谢

4

1 回答 1

3

通常,使用少量重写/重定向的 htaccess 文件会更快。

关于重定向:

8,000 不是非常多的重定向。根据 Apache 为您运行的方式,使用 htaccess 文件执行此操作可能最终会为每个 Apache 线程添加额外的内存,因为每个线程可能需要将整个列表保存在内存中,但这不会超过几兆最多内存。现在内存很便宜。您的服务器上是否有严重的内存限制——这意味着您接近分页了吗?

从 Apache 直接查找内存散列的 CPU 命中率可以忽略不计(假设整个内容都存储在内存中 - 所以基本上假设您对服务器上存在严重的内存限制回答“否”)。

必须为每个文件解析一个 PHP 页面,然后进行 MySQL 查找,然后将结果返回给 PHP 的延迟肯定会比仅使用 Apache 造成更大的打击。请记住,您需要加载 PHP 解释器、连接到 MySQL 服务器、解析结果并从中构建一个页面。与简单的重定向相比,这是一个相当复杂的过程。

关于重写:

你已经在加载 ModRewrite 了吗?这是一个非常该死的高效野兽。假设您没有进行比上述更复杂的重写,那么使用它绝对是安全的。

如果您还没有加载它,并且您可以轻松地制作一个简单的重写列表,那么您应该问自己:您的服务器是更多的 CPU 受限还是更多的 RAM 受限。如果内存有限,请使用 mod_rewrite,因为您的规则可能比重定向列表小几个数量级。

综上所述,您需要确定的主要内容是您是否真的需要在每个服务器请求上运行它。

例如:

如果您知道需要对服务器上 /content/ 目录中的每个请求运行此命令,则将其放入 /content/ 中的 .htaccess 文件中

但是,如果您只需要在对 /content/default.asp?var_a=blah 的请求上运行它,并且对 /content/default.asp 的许多其他请求不需要重定向,则将其设为 PHP 查找.

于 2013-08-12T14:02:51.847 回答