apache mod在子目录上重写

时间:2012-03-14 16:21:37

标签: mod-rewrite apache

当我已经在webroot上有一个重写规则来删除'index.php'时,关于子目录上的mod重写的快速问题

我的.htaccess看起来像这样:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

我有一个API目录(/webroot/api/index.php),我希望有一个RESTful API(Restler)来为应用程序提供请求 - 所以我的问题是......

要发出RESTful请求,我需要使用以下URL格式:

/webroot/api/index.php/user/get/ (to get all the users)

我希望实现的是形式:

/webroot/api/user/get/ (return a list of users)

仍保留主网站的基本重写规则

/webroot/members/  (display a list of users in the main applications)
非常感谢, Justen

1 个答案:

答案 0 :(得分:0)

你的基础重写看起来很奇怪。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

这表示如果我们匹配index.php,我们就完成了(并且没有重写)。那是你要的吗?如果请求完全针对没有尾随材料的/index.php,那么它将保持不变。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

删除 index.php,您需要以下内容:

RewriteRule ^index.php/(.*) $1 [L]

E.g。 index.php/foo转到foo(相对重写:然后RewriteBase加上/foo会变成{{1}}网址以反馈到请求管道中。)