我想改变
detail.php?cid=$category&ccid=$category2&cccid=$category3&fid=$id&ftitle=$titleseo
到
detail/$category/$category2/$category3/$id/$titleseo
但是如果其中一个参数等于0,则该参数不应该是可见的。
因此,如果$category=0
,则网址应为:
detail/$category2/$category3/$id/$titleseo
如果$category2=0
,则网址应为:
detail/$category/$category3/$id/$titleseo
这是否可以在htaccess中使用重写规则,如果是,这应该是什么样的?
答案 0 :(得分:1)
考虑到/$category/$category2/$category3/
给定的名称/$id/$titleseo
已修复,您可以使用此方法:
RewriteEngine On
RewriteBase /
RewriteRule ^detail/(\$category)?/?(\$category2)?/?(\$category3)?/?(\$id)/(\$titleseo)$ - [E=PASS:cid=$1&ccid=$2&cccid=$3&fid=$4&ftitle=$5]
RewriteCond %{ENV:PASS} (.*)(&)[a-z]+=&(.*)$|[a-z]+=&(.*)$
RewriteRule ^ details.php?%1%2%3%4 [L]
RewriteCond %{QUERY_STRING} (.*)(&)[a-z]+=&(.*)$|[a-z]+=&(.*)$
RewriteRule ^ details.php?%1%2%3%4 [L]
RewriteCond %{ENV:PASS} ^(.+)$
RewriteRule ^ details.php?%1 [L]
通常使用此:
RewriteEngine On
RewriteBase /
RewriteRule ^detail/([^/]+)?/?([^/]+)?/?([^/]+)?/?(\$id)/(\$titleseo)$ - [E=PASS:cid=$1&ccid=$2&cccid=$3&fid=$4&ftitle=$5]
RewriteCond %{ENV:PASS} (.*)(&)[a-z]+=&(.*)$|[a-z]+=&(.*)$
RewriteRule ^ details.php?%1%2%3%4 [L]
RewriteCond %{QUERY_STRING} (.*)(&)[a-z]+=&(.*)$|[a-z]+=&(.*)$
RewriteRule ^ details.php?%1%2%3%4 [L]
RewriteCond %{ENV:PASS} ^(.+)$
RewriteRule ^ details.php?%1 [L]
上面的规则,首先通过捕获任何以细节开始的请求来制作和环境,然后以/$id/$titleseo
结束,然后检查ENV值以查看哪个值具有/没有值并最终相应地重定向。
如果您需要更多类别,则两个规则都适用于三个级别的类别,您可以编辑这样的规则:
在([^/]+)?/?
之后添加此RewriteRule ^detail/
,然后在[E=PASS:cid=$1&ccid=$2&cccid=$3&ccccid=$4&fid=$5&ftitle=$6]
之后添加%5
,您可以比较以查看此前一个与之前的一个之间的差异以获得标准,最后添加{{1} } /details.php?%1%2%3%4 [L]
喜欢这个/details.php?%1%2%3%4%5 [L]
等等。
答案 1 :(得分:0)
到目前为止,没有让Mohammed的代码工作,但是使用了
RewriteRule ^detail/?([0-9a-zA-Z]+)?/?([0-9a-zA-Z]+)?/?([0-9a-zA-Z]+)?/([0-9a-zA-Z]+)/([0-9a-zA-Z]+) detail.php?cid=$1&ccid=$2&cccid=$3&fid=$4&&ftitle=$5