重写具体到更一般
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 内部服务器错误
我被要求解释一下,所以这里有一些例子:
- 如果 "domain.com/aaa/" 存在,则转到 "domain.com/aaa/"
- 如果"domain.com/bbb/"不存在,则转到"domain.com/users/?login=bbb"
- if "domain.com/ccc.html exists, it goes to "domain.com/ccc.html"
- if "domain.com/ddd.html does not exist, it goes to "domain.com/users/?login=ddd.html"
- 同时,"domain.com/users/eee" 转到 "domain.com/users/?login=eee",因为这是主要条件,第二个条件是后备条件或更一般的包罗万象。
这应该有效。您必须重复条件,它们不会延续到下一个规则。
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]
我想做一个 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 内部服务器错误
我被要求解释一下,所以这里有一些例子:
- 如果 "domain.com/aaa/" 存在,则转到 "domain.com/aaa/"
- 如果"domain.com/bbb/"不存在,则转到"domain.com/users/?login=bbb"
- if "domain.com/ccc.html exists, it goes to "domain.com/ccc.html"
- if "domain.com/ddd.html does not exist, it goes to "domain.com/users/?login=ddd.html"
- 同时,"domain.com/users/eee" 转到 "domain.com/users/?login=eee",因为这是主要条件,第二个条件是后备条件或更一般的包罗万象。
这应该有效。您必须重复条件,它们不会延续到下一个规则。
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]