Regex .htaccess复杂正则表达式

Regex .htaccess复杂正则表达式,regex,.htaccess,mod-rewrite,Regex,.htaccess,Mod Rewrite,我想在我的.htaccess中制定一个复杂的重写规则,我有以下URL: domain.com/?w={WHAT}&l={WHERE}&r={RADIUS}&f={FILTER} 我想重定向到以下URL结构: 如果w和l不是空的 domain/{WHAT}-jobs-in-{WHERE} domain/jobs-in-{WHERE} 如果w不为空,l为空 domain/{WHAT}-jobs 如果w为空,l不为空 domain/{WHAT}-jobs-in-{W

我想在我的
.htaccess
中制定一个复杂的重写规则,我有以下URL:

domain.com/?w={WHAT}&l={WHERE}&r={RADIUS}&f={FILTER}
我想重定向到以下URL结构:

  • 如果w和l不是空的

    domain/{WHAT}-jobs-in-{WHERE}
    
    domain/jobs-in-{WHERE}
    
  • 如果w不为空,l为空

    domain/{WHAT}-jobs
    
  • 如果w为空,l不为空

    domain/{WHAT}-jobs-in-{WHERE}
    
    domain/jobs-in-{WHERE}
    
  • 如果有其他参数,则将它们放在表格末尾:

    domain/{WHAT}-jobs-in-{WHERE}/?r={RADIUS}&f={FILTER}
    

  • 这三条规则应该起作用:

    RewriteEngine On
    
    # if not domain.com then bail out
    RewriteCond %{HTTP_HOST} !^(www\.)domain\.com$ [NC]
    RewriteRule ^ - [L]
    
    RewriteCond %{QUERY_STRING} ^w=([^&]+)&l=([^&]+)(?:&(.+))?$ [NC]
    RewriteRule ^$ /%1-jobs-in-%2?%3 [L,NE,R=302]
    
    RewriteCond %{QUERY_STRING} ^w=([^&]+)(?:&l=&)?(.*)$ [NC]
    RewriteRule ^$ /%1-jobs?%2 [L,NE,R=302]
    
    RewriteCond %{QUERY_STRING} ^(?:w=&)?l=([^&]+)(?:&(.+))?$ [NC]
    RewriteRule ^$ /jobs-in-%1?%2 [L,NE,R=302]
    
    # replace + by - recursively
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^+]*)\+(.*)$ /$1-$2 [L,R]
    

    你能在你的问题中加上你试过的吗?还有,什么是“空的”?您的意思是参数完全丢失了,还是没有值?有几个例子总是很好的。是的,空表示参数丢失、未设置或值为空Hey anubhava,感谢快速响应。我会测试一下,然后给你回信。你认为在这个规则中w和l的顺序是否重要?因为有时顺序可以是?w=bla&l=blu和?l=blue&w=bla。。你认为呢?这段代码要求维持秩序。也许可以使它的顺序不可知,但这将使这些规则变得更加复杂。嗯,这意味着我需要修正顺序,使其永远不变。好的,我试试看。有一件事:你能在这个规则中添加域名吗。因为我有不同的域,每个域都有不同的“作业”词,这就是为什么我需要规则中的domain.com。一件事:如果w或l中的关键字是由两个关键字组成的,如:account manager,则重写时会放置一个“+”分隔符,它应该是破折号:例如:domain.com/?w=account+manager&l=new+york->domain.com/account-manager-jobs-in-new-york。转换是否可以实现这一点?
    domain.com
    条件可以轻松添加。是否要用重定向URI中的其他内容替换
    +