apache .htaccess规则与动态页面(php)性能

Bia*_*nca 8 php mysql performance .htaccess

我有一个新的网站(我正在建立一个),我想确保我正确地做,而不是在1个月后重新设计.

所以我有这样的页面:

/candy
/candy/chocolate
/drink
/drink/beer
Run Code Online (Sandbox Code Playgroud)

所以我看看stackoverflow关于我怎么能这样做,我发现:

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

现在,这将有效,但我的问题是关于执行.很明显,$ _GET [category]将是名称,而页面将是巧克力.

现在当我做我的查询时,我会这样做:

$sql = "SELECT myfields FROM mytable WHERE name = '" . $_GET['category'] . "'";
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用INT的主键,会更好吗?如果是这样,我可以在我的.htaccess中做些什么呢?

rcs*_*s20 7

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

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

添加索引到页面的名称

ALTER TABLE `mytable` ADD key indexname (columnname);
Run Code Online (Sandbox Code Playgroud)

例:

ALTER TABLE `page` ADD key pagename (name);
Run Code Online (Sandbox Code Playgroud)

现在,因为结构是不同的/candyvs /candy/chocolate,我假设你有某种结构,如带有列表(/糖果)和特定列表(/ 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]
Run Code Online (Sandbox Code Playgroud)

然后,您只需使用索引字段查询类别和页面.这会很快(当然没有INT那么快,但仍然很快).

对于您可以执行的第一个查询:

$name = addslahes($name);
SELECT fields FROM category WHERE category = '$name';
Run Code Online (Sandbox Code Playgroud)

当你得到一个页面,你可以使用:

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

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