2015-02-24 111 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