浏览器性能:动态URL与静态URL

时间:2014-04-03 15:02:38

标签: php apache .htaccess url mod-rewrite

我觉得有点愚蠢地问这个 - 就像我应该可以通过谷歌搜索找到 - 但我没有找到关于这个主题的任何真正好的,有争议的想法。

我正在考虑将我的网址从动态http://www.example.com/?section=news&news_id=42重写为静态http://www.example.com/news/42/awesome-news-item-title - 我已经找到了解决这个问题的方法,并且结果很多。现在,在我的网站上实现这一点之前,我希望对浏览器性能有一些中立的输入。

我发现的所有来源都说静态网址更适合搜索引擎优化(除了这个google webmaster central blogpost) - 他们肯定在可读性方面更加用户友好。

只是我觉得网站使用重写加载waaay的时间更长。

RewriteRule ^news/([0-9]+)(\/[a-z-]+)?$ /index.php?section=news&news_id=$1&title=$2

所以,我的一堆问题是:

  • mod_rewrite如何影响浏览器性能?
  • 你还会重写网址吗?
  • 有没有比我用过的更好的方法?
  • 我会使用this answer对我的新闻标题进行网址编码。同意?更好的建议?
  • 有什么我真的需要注意的吗? (除了检查URL中给出的标题是否与我的新闻标题匹配以避免http://www.example.com/news/42/example-com-is-stupid之类的内容)

2 个答案:

答案 0 :(得分:1)

老实说对mod_rewrite的效果一无所知,但我可以告诉你:

  1. 它不会影响“浏览器性能”,因为它发生在服务器上。
  2. Apache hints没有太大的性能损失,因为它为“重定向到地理位置分布式服务器”指定This ruleset relies on HostNameLookups being set on, which can be a significant performance hit.(并且没有基本的重写类型)。
  3. 静态网址的SEO /干净方面会大大超过任何性能点击率,这就是人们继续使用它们的原因。
  4. 作为旁注,许多CRM将所有网址重定向到index.php并使用网址路由器(请参阅项目中的源代码,如klein.phpSlim)来处理所有网址要求。如果您主要为/news之类的内容提供动态内容,则可能不需要对项目范围进行此操作。但是,如果您开始为多个不同的网址(例如newscategoriesauthors)创建重写规则,那么路由所有肯定会更容易,更有效>请求index.php并使用PHP查看访问了哪些URL以及“将请求路由到”的功能。


    回复您的评论:

    我的(和常见的)重写规则类似于以下内容:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L,QSA]
    

    这会将文件或目录的所有请求重定向到index.php。这意味着无论何时尝试访问存储库中存在的文件,它都将直接提供文件(因此图像,样式,脚本甚至是公共目录中的PHP脚本)。换句话说,可缓存内容不受影响,您可以使用index.php$_SERVER['REQUEST_URI']将URL调用路由到不同的类和函数。

答案 1 :(得分:1)

不确定性能,但这是一个类似于我使用的示例。我将url标题创建为数据库中的记录,并按标题而不是id来提取记录。这样,如果有人想尝试操纵标题,请求将无效。另外,它有助于SEO。

<?php

function route($path_position) {
  $url_path = $page_path = explode("/",$_SERVER['REQUEST_URI']);
  return filter_var($url_path[$path_position],FILTER_SANITIZE_URL);
}

$section = route(1);
$news_id = route(2);
$url_news_title = route(3);

$query = "SELECT * FROM news_table WHERE url_news_title = :url_news_title";
echo "/" . $section . "/" . $news_id . "/" . $url_news_title;

我使用以下.htaccess文件:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]