友好URL可能包含或不包含参数

时间:2018-03-17 16:23:59

标签: .htaccess friendly-url

我的HTACCESS上有一个frindly(不是很多但很适合我)的URL表达式。 该页面符合“模式”和ids

编辑类别:

#URL
    edit.php?mode=cat&cat=1
#The expression
    RewriteRule ^editar/([^/]*)/([^/]*)$ /edit.php?mode=$1&cat=$2 [NC,L]
#Output
    /editar/cat/1

编辑子类别:

#URL
    edit.php?mode=subcat&cat=1&subcat=1
#The expression
    RewriteRule ^editar/([^/]*)/([^/]*)/([^/]*)$ /edit.php?mode=$1&cat=$2&subcat=$3 [NC,L]
#Output
    /editar/subcat/1/1

编辑产品:

#URL
    edit.php?mode=prod&cat=1&subcat=1&prod=1
#The expression
    RewriteRule ^editar/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /edit.php?mode=$1&cat=$2&subcat=$3&prod=$4 [NC,L]
#Output
    /editar/prod/1/1/1

到目前为止,非常好!

但我在同一页面上有三个表达式。

RewriteRule ^editar/([^/]*)/([^/]*)$ /edit.php?mode=$1&cat=$2 [NC,L]
RewriteRule ^editar/([^/]*)/([^/]*)/([^/]*)$ /edit.php?mode=$1&cat=$2&subcat=$3 [NC,L]
RewriteRule ^editar/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /edit.php?mode=$1&cat=$2&subcat=$3&prod=$4 [NC,L]

有没有办法将它减少到只有一个表达式,其中一些变量可能会或可能不存在于字符串中?

喜欢:edit.php?mode = prod& cat = 1 THIS - > & subcat = 1 AND THIS - > & prod = 1是可选的吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个:

RewriteEngine On
RewriteRule ^editar/([^/]+)/([^/]+)/?([^/]*)/?([^/]*)?$  - [E=PASS:mode=$1&cat=$2&subcat=$3&prod=$4]
RewriteCond %{ENV:PASS} ^((mode=(.*))&subcat=&prod=|(mode=(.*)&subcat=(.+))&prod=|(mode=(.*)&subcat=(.+)&prod=(.+)))$
RewriteRule ^    /edit.php?%2%4%7 [L,NE]

因此,使用上面的代码,您将能够处理如下所示的请求:

/editar/1 or editar/1/     = not match
/editar/1/2 or editar/1/2/   = match and redirect to /edit.php?mode=1&cat=2
/editar/1/2/3 or editar/1/2/3/   = match and redirect to /edit.php?mode=1&cat=2&subcat=3
/editar/1/2/3/4  = match and redirect to /edit.php?mode=1&cat=2&subcat=3&prod=4
/editar/1/2/3/4/    = not match

注意:清除浏览器缓存测试。

答案 1 :(得分:0)

您可以在模式中选择第3和第4个捕获组。

RewriteRule ^editar/([^/]*)/([^/]*)/?([^/]*)/?([^/]*)/?$ /edit.php?mode=$1&cat=$2subcat=$3&prod=$4 [NC,L]

但是,如果uri为subcat,那么您将获得空product/editar/foo/bar值。