.htaccess复杂的正则表达式

时间:2013-10-13 08:17:05

标签: regex .htaccess mod-rewrite

我想在.htaccess中制作一个复杂的重写规则,我有一个网址:

domain.com/?w={WHAT}&l={WHERE}&r={RADIUS}&f={FILTER}

我想重定向到以下网址结构:

  1. 如果w和l不为空

    domain/{WHAT}-jobs-in-{WHERE}
    
  2. 如果w不为空且l为空

    domain/{WHAT}-jobs
    
  3. 如果w为空且l不为空

    domain/jobs-in-{WHERE}
    
  4. 如果还有其他参数,请将其放在表格的最后:

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

1 个答案:

答案 0 :(得分:0)

这3条规则应该起到作用:

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]