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

htaccess rewrite and pass top directory name

下面是在进行 htaccess 重写时传递目录名称的方法:

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

但是添加到上面的时候,最后一行也要抓到服务器。com/whatever 情况:

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

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

怎么会?..

谢谢!

有2个问题:

  • 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=&xb=&xc=&xd= [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /index.php?xa=&xb=&xc= [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?xa=&xb= [L,QSA]