URL重写冲突规则

时间:2013-05-24 17:17:41

标签: .htaccess

我无法让我的网址重写工作,我目前有这3条规则

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,L]

我要添加一条规则,如果用户点击http://example.com/metrics/,它会将它们发送到index.php?/ sign-in

我尝试过RewriteRule /metrics/(.*) /index.php?/sign-in [PT],但它似乎与。*规则相冲突,并且根本没有将用户发送到/index.php?/sign-in。

1 个答案:

答案 0 :(得分:1)

如果您的逻辑上存在逻辑冲突,请在更一般的规则之前添加更具体的规则。

为了您的目的,这样的事情应该有效:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^metrics/?(.*)$ /index.php?/sign-in [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [QSA,L]

顺便说一下,您可能需要考虑修改您的方法。

如果用户已登录怎么办?也许,您的/metrics页面的行为(.htaccess)与其他页面的行为相同,并且其代码与您选择的语言中的if( !SignedIn() ) Redirect( "/sign-in" )相同。