Url在子目录中重写

时间:2013-12-28 16:17:10

标签: php apache .htaccess url-rewriting restler

我正在使用Restler在Apache服务器上构建REST API,并且我有一些url重写问题 这是我的目录:

/ API:
/供应商
...
.htaccess(第1级)
/ public:
/例子
/测试
/ src目录
.htaccess(第二级)
/ explorer:
/ CSS
/图片
/ lib目录
的index.html

现在,这就是我想要的:
1)我想要一个看不见的“公共”目录。
例如, GET mydomain.com/api/data 之类的请求会直接将其选入 mydomain.com/api/public/data

2)我希望“public”目录的根目录为 explorer / index.html ,但是这个文件以相对的方式加载了大量资源,有时它不会加载。

所以基本上我想访问/api/public/explorer/index.html并加载所有资源,如果我只是尝试访问: mydomain.com/api

以下是我现在的情况:

Options +FollowSymLinks
AddDefaultCharset UTF-8

RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_URI} !^public/
RewriteRule ^(.*)$ /api/public/$1

对于第一级.htaccess,它看起来效果很好

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/$ explorer/ [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule mod_php5.c>
    php_flag display_errors On
</IfModule>

对于二级.htaccess

有任何建议吗?谢谢

1 个答案:

答案 0 :(得分:1)

这条规则:

RewriteRule ^/$ explorer/ [QSA,L]

不会起作用,因为达到该规则的请求将删除前导斜杠:

RewriteRule ^$ explorer/ [QSA,L]

但我不确定那是你想要的,因为为了达到这条规则,你需要去:

http://mydomain.com/api/

如果这就是你想要的,那么你只需要删除那个前导斜杠。