2015-02-24 100 views
0

我有我的API作爲目錄結構RESTful API中:htaccess的與子目錄不工作

api/ 
    cameras/ 
     index.php 
     ... 
     .htaccess 
    bar/ 
     set/ 
     index.php 
     scan/ 
     index.php 
     retrieve/ 
     index.php 
     list/ 
     index.php 

之前我加入了文件夾吧,我與我的.htaccess文件夾,該工作

RewriteEngine On 
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) index.php [L] 

然後我添加了這個來使它工作。

RewriteEngine On 
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule bar/set/(.*) bar/set/index.php [L] 
RewriteRule bar/scan/(.*) bar/scan/index.php [L] 
RewriteRule bar/list/(.*) bar/list/index.php [L] 
RewriteRule bar/retrieve/(.*) bar/retrieve/index.php [L] 
RewriteRule (.*) index.php [L] 

除列表set中的第一個以外,他們都工作。我做錯了什麼?

回答

1

我覺得你的條件的順序可能會導致的問題。沒有看到你使用的URL,我不得不假設。但RewriteCond僅適用於直接跟隨它的規則。你在條件和原始規則之間加入新規則。改變順序並嘗試這種方式,看看它是如何工作的。

RewriteEngine On 
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] 
RewriteRule ^bar/set/(.*)$ bar/set/index.php [L] 
RewriteRule ^bar/scan/(.*)$ bar/scan/index.php [L] 
RewriteRule ^bar/list/(.*)$ bar/list/index.php [L] 
RewriteRule ^bar/retrieve/(.*)$ bar/retrieve/index.php [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*) index.php [L] 
1

RewriteCond只適用於下一個RewriteRule。試試這個代碼:

DirectoryIndex index.php 
RewriteEngine On 
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule^- [E=HTTP_AUTHORIZATION:%1] 

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

RewriteRule ^(bar)/(scan|set|scan|retrieve)/(.*)$ $1/$2/index.php [L,NC] 

RewriteRule . index.php [L] 
+1

乾淨的實施。我會用這個!謝謝。 – Tom 2015-02-25 15:17:04

+0

不客氣,很高興你喜歡它。 – anubhava 2015-02-25 15:20:39