php - 具有动态页面 (php) 性能的 apache .htaccess 规则

标签 php mysql performance .htaccess

我有一个新网站(我现在正在 build 一个),我想确保我做得正确,而不是在 1 个月后重新设计。

所以我有这样的页面:

/candy
/candy/chocolate
/drink
/drink/beer

所以我在 stackoverflow 上查看如何执行此操作,我发现:

RewriteRule ^([a-z]+)/([a-z]+)/?$ index.php?category=$1&page=$2 [NC,L]

现在,这将起作用,但我的问题是关于执行。显然 $_GET[category] ​​将是名称,例如页面将是巧克力。

现在当我查询时我会做:

$sql = "SELECT myfields FROM mytable WHERE name = '" . $_GET['category'] . "'";

现在,如果我使用作为 INT 的主键会更好吗?如果是这样,我可以在我的 .htaccess 中做什么来做到这一点?

最佳答案

不幸的是,使用名称并将其转换为唯一 ID 可能比在名称本身上创建索引需要更长的执行时间。

以下是我根据您拥有的网址推荐的内容:

为页面名称添加索引

ALTER TABLE `mytable` ADD key indexname (columnname);

例子:

ALTER TABLE `page` ADD key pagename (name);

现在,由于/candy/candy/chocolate 的结构不同,我假设您有某种结构,例如带有列表的主页 (/candy ) 和特定列表 (/candychocolate) 所以在这种情况下你可以使用这个:

RewriteRule ^([a-z]+)/?$ index.php?category=$1&page=list [NC,L]
RewriteRule ^([a-z]+)/([a-z]+)/?$ index.php?category=$1&page=$2 [NC,L]

然后您可以使用索引字段简单地查询类别和页面。这会很快(当然不如 INT 快,但仍然很快)。

对于第一个查询你可以做:

$name = addslahes($name);
SELECT fields FROM category WHERE category = '$name';

当您获得一个页面时,您可以使用:

$categoryname = addslahes($categoryname);
$pagename = addslahes($pagename);
SELECT fields FROM page LEFT JOIN category ON (page.categoryid = category.id) WHERE page = '$pagename' AND category = '$categoryname';

这样,通过同时使用类别和页面,您将避免找不到页面 (404)。

关于php - 具有动态页面 (php) 性能的 apache .htaccess 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9186603/

相关文章:

mysql - SQL:select 语句中的聚合函数,带有涉及 group by 子句的连接

php - 从 MySQL 数据库中的列表中删除项目

c# - 位运算性能,如何提高

python - 加快 Pandas 中日期计算之间的时间?

php - 在 PHP 中使用 DLL for Dummies

php - 我如何计算并获得每 10 分钟有起点和终点的两点之间的时间估计的下一个经纬度?

php - <a href> 表单选项?动态Jquery

php - CodeIgniter 显示多选而不是下拉

mysql - 在 mysql 表中添加/保存/插入代码后无法正确显示 C/C++ 代码

html - 将我的 CSS/JS/Sprite 嵌入我的单页 Web 应用程序会使其加载速度更快吗?