我打算在主目录中添加最多10个.htaccess重写网址代码会影响我网站的执行(网站加载时间)吗?
我当前的.htaccess文件是
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([0-9]+)/([0-9]+)/([^.]+).html index.php?perma=$3
RewriteRule ^movies/([^.]+).html gallery.php?movie=$1
RewriteRule ^album/([^.]+).html gallery.php?album=$1
RewriteRule ^img/([^.]+)/([^.]+).html gallery.php?img=$2
RewriteRule ^movies.html gallery.php
答案 0 :(得分:1)
您可能需要查看performance impact of order of rewrite rules when using apache mod_rewrite,并且像@diolemo评论的那样,对于20个重写规则,它并不明显。
答案 1 :(得分:1)
下载网页所需的大部分时间来自检索HTML,CSS,JavaScript和图像。重写URL的时间可以忽略不计。
通常,图像是加载时间较慢的最大原因。像Pingdom这样的工具可以帮助您直观地了解各种组件的加载时间。
HTH。
答案 2 :(得分:1)
是的,它会影响加载时间。您拥有的规则/例外越多,渲染所需的时间就越长。但是:我们谈论的是人眼不会注意到的微/毫秒。
答案 3 :(得分:1)
10个规则不是问题,但是供将来参考:通常的方法是将所有内容重定向到单个入口点,让应用程序进行路由。一个简单的例子:
<强>的.htaccess 强>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]
<强>的index.php 强>
$query = $_SERVER['REQUEST_URI'];
$queryParts = explode('/', $query);
switch($queryParts[0]) {
case 'movies':
// ...
break;
case 'album':
// ...
break;
case 'img':
// ...
break;
// ...
default:
// 404 not found
}
RewriteCond
条件可确保不会重写对现有文件的请求。 QSA是可选的,它表示“追加查询字符串”,因此例如movies.html?sort=title
会被重写为index.php?sort=title
。原始请求URI位于$_SERVER['REQUEST_URI']
。
如果您的应用程序是面向对象的,那么Front Controller模式将是您感兴趣的。所有主要的PHP框架都以某种方式使用它,它可能有助于查看它们的实现。
如果没有,像Silex这样的微框架可以为你完成这项工作。在Silex中,您的路由可能如下所示:
<强>的index.php 强>
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
$app->get('/{year}/{month}/{slug}', function ($year, $month, $slug) use ($app) {
return include 'article.php';
});
$app->get('/movies/{movie}.html', function ($movie) use ($app) {
return include 'gallery.php';
});
$app->get('/album/{album}.html', function ($album) use ($app) {
return include 'gallery.php';
});
$app->get('/img/{parent}/{img}.html', function ($parent, $img) use ($app) {
return include 'gallery.php';
});
$app->get('/movies.html', function () use ($app) {
return include 'gallery.php';
});
$app->run();
gallery.php
和article.php
必须返回他们的输出。如果将$_GET['var']
替换为$var
并添加输出缓冲,则可以使用此index.php重用现有脚本:
<强> gallery.php 强>
ob_start();
// ...
return ob_get_clean();