我有一个新网站(我现在正在 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/