htaccess使用等于0的参数重写url

时间:2018-04-06 20:04:12

标签: .htaccess url-rewriting

我想改变

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中使用重写规则,如果是,这应该是什么样的?

2 个答案:

答案 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