htaccess重写并传递顶级目录名称

时间:2015-02-14 13:03:54

标签: .htaccess

下面用于在执行htaccess重写时传递目录名:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+) /index.php?xa=$1&xb=$2&xc=$3&xd=$4 [NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+) /index.php?xa=$1&xb=$2&xc=$3 [NC]
RewriteRule ^([^/]+)/([^/]+) /index.php?xa=$1&xb=$2 [NC]

但是当添加到上面时,最后一行也会抓住server.com/whatever situation:

RewriteRule ^([^/]+) /index.php?xa=$1 [NC]

我收到500服务器错误...

怎么来的?..

谢谢!

1 个答案:

答案 0 :(得分:0)

有两个问题:

    在将第一个规则应用于下一个RewriteCond 之前,
  • RewriteRule
  • $的正则表达式中没有锚点RewriteRule

这是固定代码:

RewriteEngine On

# ignore all rules below from files and directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?xa=$1&xb=$2&xc=$3&xd=$4 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /index.php?xa=$1&xb=$2&xc=$3 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?xa=$1&xb=$2 [L,QSA]