重写具体到更一般

Rewriting Specific to more General

我想做一个 mod_rewrite 这样:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

users/ 的任何请求都会转到 index.php?login=(whatever)

RewriteRule ^users/(.+) ?login= [NE,L]

users/ 之外的任何其他请求都会转到同一个地方。

RewriteRule ^(.+) users/?login= [NE,L]

但是第二部分产生了 500 内部服务器错误

我被要求解释一下,所以这里有一些例子:

这应该有效。您必须重复条件,它们不会延续到下一个规则。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^users/(.+)$ /users/?login= [NE,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /users/?login= [NE,L]

假设 /users/ 目录确实存在。

或者这更有效,如果你以后不运行任何规则。它可以防止对现有项目进行任何处理,并避免将文件系统检查加倍。

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^users/(.+)$ /users/?login= [NE,L]
RewriteRule ^(.+)$ /users/?login= [NE,L]