我完全重写了我的网站代码,因为可以优化很多。我目前正在使用的重写规则也不是我想的优化。
我想要网址如下:
Cities:
domain.com/new-york
domain.com/chicago
domain.com/dallas
...
Categories:
domain.com/fruit
domain.com/meat
domain.com/beverage
...
目前,我的htaccess文件中包含此代码:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+) index.php?task=cityorcategory&cityorcat=$1 [L]
我在索引文件中的操作如下:
我不想检查变量是否是索引文件中的类别,因为我认为这对网站性能不利。
我不确定我需要在这里改变什么。我可以保留像index.php这样的URL结构吗?task = cityorcategory& cityorcat = $ 1或者这是一个坏主意吗?
我需要更改哪些内容才能排除数据库中的变量比较?
答案 0 :(得分:0)
如果是cityorcategory,你可以重写一个单独的页面,比如/city.php。
或者您可以将index.php视为分发中心,并在$ _GET上构建一个开关['任务']
switch ($_GET['task']) {
case 'cityorcategory':
// redirect
break;
case 'countrycategory':
// redirect
break;
default:
echo "Not a category, so process";
break;
}
如果您只是问:我如何知道数据库中是否存在类别..只需运行查询即可。我假设你必须根据类别构建页面。如果运行查询并返回0条记录,则该类别不存在,您可以显示默认索引页面。
或者,如果您没有很多类别,并且它们没有更改,您可以创建一个类别数组,并检查具有现有类别的数组。然而,这有点奇怪。但是,如果你死了再次类别..
在最后一种情况下:您可以再次针对现有类别进行HTACCESS匹配:如果这些是有限的数字和不要改变。
答案 1 :(得分:0)
您可以使用重写映射http://httpd.apache.org/docs/current/rewrite/rewritemap.html并让cronjob每x分钟构建一次映射。取决于数据更改的频率。