0

以下は私の.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 と applications はフォルダーですが、RewriteCond %{REQUEST_FILENAME} !-d効果はありません。lib と application の条件を別々に記述する必要があります。
  2. 主な問題は、API 呼び出しで結果が得られないことです。私は自分の api をwww.myweb.com/api/User/xyz%40gmail.comにリダイレクトしていると呼んwww.myweb.com/api/index.php/api/User/xyz%40gmail.comでいますが、これは正しいです。しかし、これへの呼び出しは空白です。
4

1 に答える 1

4

ARewriteCondは、直後の にのみ適用されます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 つのルールのいずれかが適用されるためには、上位の条件が満たされていないことになります。

于 2013-02-12T14:38:57.987 に答える