RewriteCond of htaccess工作不正常

时间:2013-02-12 07:30:02

标签: apache .htaccess

下面是我的.htaccess文件:

Options -Indexes
RewriteEngine On
RewriteBase /

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

RewriteRule ^api/(.*)$ api/index.php/api/$1 [L]
RewriteRule ^lib/(.*) lib/$1 [QSA,L]
RewriteRule ^applications/(.*) applications/$1 [QSA,L]
RewriteRule ^([^\/]*)/index.php /lib/vt-index.php?clientid=$1 [QSA,L]
RewriteRule ^([^\/]*)/([^?]*) /lib/vt/$2?clientid=$1 [QSA]

我有一些问题:

  1. lib和应用程序是文件夹,但是RewriteCond %{REQUEST_FILENAME} !-d没有效果,我必须单独为lib和应用程序编写条件。
  2. 主要问题是我的api电话没有给我结果。我正在调用我的api www.myweb.com/api/User/xyz%40gmail.com,它正在重定向到www.myweb.com/api/index.php/api/User/xyz%40gmail.com,这是正确的。但是对此的调用是空白的。

1 个答案:

答案 0 :(得分:4)

RewriteCond仅适用于紧随其后的RewriteRule。条件不是全局设置,也不适用于多个规则。您需要为每个规则重复条件:

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

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

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

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\/]*)/([^?]*) /lib/vt/$2?clientid=$1 [QSA]

或者你可以否定这个条件并让它首先通过:

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

RewriteRule ^api/(.*)$ api/index.php/api/$1 [L]
RewriteRule ^lib/(.*) lib/$1 [QSA,L]
RewriteRule ^applications/(.*) applications/$1 [QSA,L]
RewriteRule ^([^\/]*)/index.php /lib/vt-index.php?clientid=$1 [QSA,L]
RewriteRule ^([^\/]*)/([^?]*) /lib/vt/$2?clientid=$1 [QSA]

这样,你的条件的反面就会被应用到一个简单地说“什么都不做,不再重写”的规则。为了应用最底层的5条规则,顶部的条件不符合