我想确定使用 Apache 的 .htaccess mod rewrite 是否是重定向到 PHP 文件的更快方法,与使用 PHP 的标头重定向核心功能从一个 PHP 文件重定向到另一个 PHP 文件相比。
我四处寻找,但找不到任何关于此主题的信息。如能提供任何帮助,我将不胜感激。
答案1
注意:我假设“重定向”是指重写规则实际上并不使用 [R] 标志,而是将请求“重定向”到不同的 PHP 文件 - 例如,根本没有标志或使用 [L] 标志。
如果这个假设是错误的,那么请看一下我的“关于性能的说明”论点,它仍然成立。
.htaccess 规则肯定会更快!
原因如下:
- 使用 .htaccess 规则:当请求进入 Apache 时,它会检查 .htaccess,看看是否需要对该请求执行任何操作;注意到重写规则,它会将请求重新路由到 PHP,网站访问者将立即获得最终结果
- 使用 PHP
header
:请求进入后,由 Apache 处理,然后交给 PHP,然后 PHP 向访问者的浏览器发送一个页面重定向标头,浏览器发送另一个请求,Apache 处理它,将其交给 PHP,只有在这一切之后,您的访问者才会最终得到他想要的东西!
性能说明:在任何情况下(即使在千兆 LAN 上),上述选项 #1 都会更快。正则表达式可能很慢,但 Apache 是一个已经在内存中的 C 程序,而 PHP 是一种解释性语言,它必须在处理脚本文件之前读取和加载它。因此,我实际上希望 Apache 的重写规则具有更好的性能。不过,主要因素是方法 #2 的额外 HTTP 响应请求。
如果您坚持使用 PHP 来执行此操作,请考虑以下事项:
- 缓存 PHP 应用程序中生成的所有输出
- 如果检测到重定向条件 - 销毁缓存的输出,然后
- 包括所需的 PHP 文件以生成新的输出 - 或者调用一个函数来产生所需的输出,以防你需要一些不同的东西
这种方法也比基于 a 的方法更快header
。
答案2
我的直觉告诉我 htaccess 会有速度更快,但没有什么可以替代在特定环境中进行实际的基准测试。
答案3
需要注意的是,使用 .htaccess 文件会使一切变慢(即使设置已打开)。将重写放入 Apache 的 .conf 文件之一(httpd.conf 或 virtual-hosts.conf)中,然后设置AllowOverride none
会更快。
至于 php 和 mod_rewrite,很难说。它们都很快,我怀疑这有什么关系。
答案4
至于性能,必须考虑两个方面。首先是服务器的处理性能,其次是最终用户体验到的性能。
如果您使用任何类型的重定向,无论是通过 PHP 还是 Apache 的重定向规则(可以在 .htaccess 或 Apache 配置文件中),最终客户端必须首先等待第一个响应(重定向),然后向该 URL 发送另一个请求,然后才能最终收到所需的响应。
如果最终用户的性能对您来说很重要(例如,如果您的目标受众在中国或类似地区),您不应该使用重定向(无论是 PHP 还是 Apache),而是重写原始请求,以便用户在第一次请求时收到正确的响应。