我一直坚持使用干净的网址已经有一段时间了,我希望能在这里得到一些帮助,希望能有一些解决方案。
更新
这是我目前的导航@anubhava
$select_category = mysql_query("SELECT * FROM menu WHERE hidden = 0 ORDER BY menu ASC");
while ($ln = mysql_fetch_array($select_category)) {
$idcat = $ln['nmr'];
$catname = $ln['menu'];
$catsname = str_replace(' ', '-', $ln['menu']);
echo '<li>';
if($catname == "a certain category"){
echo '<a href="http://mywebsite.aurl.net/" title="'.$catname.'"><span><strong>'.$catname.'</strong></span></a>'. PHP_EOL;
}else{
echo '<a href="http://www.mywebsite.com/cats/'.$idcat.'/'.$catsname.'/" title="'.$catname.'"><span><strong>'.$catname.'</strong></span></a>'. PHP_EOL; // if the user press on a main category it will stay open using GET[] on $idcat in categorymain.php
}
echo '<ul';
if(isset($_GET['cats']) && $_GET['cats'] == $idcat){
echo ' style="display:block;">'. PHP_EOL;
}else{
echo '>'. PHP_EOL;
}
$select_sub = mysql_query("SELECT * FROM submenu WHERE nmrmenu = '$idcat' AND hidden = 0");
while ($lsub = mysql_fetch_array($select_sub)) {
$subname = $lsub['submenu'];
$subsname = str_replace(' ', '-', $lsub['submenu']);
$pil = '»';
$brnr = $lsub['nmr'];
if(isset($_GET['cat'])){
if ($_GET['cat'] == $brnr){
$subname = '<u>'.$lsub['submenu'].'</u>'; // here the subcategory gets underlined if the user press on a sub category in category.php
}else{
$subname = $lsub['submenu'];
}
}
echo '<li><a href="http://www.mywebsite.com/cat/'.$lsub['nmr'].'/'.$idcat.'/'.$subsname.'/"><span><strong> '.$pil.' '.$subname.' </strong></span></a></li>'. PHP_EOL; // here i send both main and sub category id so i can keep the main category opened and the underlined sub category when a user has pressed it.
}
echo '</ul>'. PHP_EOL;
echo '</li>'. PHP_EOL;
}
/更新
目前我在htaccess中的代码如下所示:
RewriteCond %{REQUEST_URI} cats/(.*)/
RewriteRule ^cats/([a-zA-Z0-9]+)/(.*)/$ /categorymain.php?cats=$1&mcn=$2
显示如下:www.xxxxx.com/cats/x/the_main_category/并且它不是很好。
我的目标是:www.xxxxx.com/the_main_category /
我甚至得到了这个:
RewriteCond %{REQUEST_URI} cat/(.*)/
RewriteRule ^cat/([a-zA-Z0-9]+)/(.*)/(.*)/$ /category.php?cat=$1&cats=$2&cn=$3
显示如下:www.xxxxx.com/cat/x/x/the_sub_category/,这真的不太好。
我的目标是:www.xxxxx.com/the_sub_category /
最后我有这个非常可怕的路线:
RewriteCond %{REQUEST_URI} id/(.*)/
RewriteRule ^id/([a-zA-Z0-9]+)/(.*)/(.*)/(.*)/$ /product.php?id=$1&cat=$2&cats=$3&pn=$4
显示如下:www.xxxxxx.com/id/xxxx/x/x/the_product/ horrid :O
我的目标是:www.xxxxx.com/the_product /
如果你能帮我解决这个问题,我会非常高兴
这么多变量的原因是因为我在导航中使用它们,因此用户可以轻松地查看他们在电子商店中的位置(如果他们想要返回),也可以在类别和产品上方进行“内部”导航他们不必在必要时使用侧面导航。
答案 0 :(得分:1)
根据您的评论,请尝试以下规则:
RewriteEngine On
RewriteRule ^([\w-]+)/([0-9]+)/?$ /product.php?id=$2&pn=$1 [L,NC,QSA]
这将支持URI结构:/productname/123
在内部重写为/product.php?id=123&pn=productname
答案 1 :(得分:0)
基本上你需要的是一个“slug”,它是每个类别的唯一标识符字符串。如果类别名称是“Food Stuff”,则您的唯一slug需要是URL的“食物”。一旦你建立了这些独特的slu,就改变你的脚本来查找slug &cat=food-stuff
而不是数据库中的ID。
从这里开始,它非常简单,你可以使用你的重写规则来完成你想要的结果。
RewriteCond %{REQUEST_URI} /(.*)/
RewriteRule ^/([a-zA-Z0-9]+)/(.*)/$ /categorymain.php?cats=$1&mcn=$2
答案 2 :(得分:0)
听起来你真正需要的是简单地将所有内容传递到一个位置:
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
然后,您将在PHP中解析所请求的URL,并确定是否请求了主要类别,子类别或产品(通过与数据库等进行比较)。
我明白你想要&#34;清洁&#34;网址,但限制您的网址仅限于文字只有在每个主要类别,子类别和产品名称都是唯一的情况下才有效,而这肯定是不现实的。您的原始设计/ some_id / some_name /非常好。在URL中加上一个数字并不会使它“不干净”。&#34;