Php 在子目录中重写Url

Php 在子目录中重写Url,php,apache,.htaccess,url-rewriting,restler,Php,Apache,.htaccess,Url Rewriting,Restler,我正在使用Restler在Apache服务器上构建RESTAPI,我遇到了一些url重写问题。 以下是我的目录: /api: /供应商 … .htaccess(第一级) /公众: /示例 /测试 /src .htaccess(第二级) /浏览器: /css /图像 /lib index.html 现在,我想要的是: 1) 我想要一个不可见的“公共”目录 例如,像GET mydomain.com/api/data这样的请求将直接将其拾取到mydomain.com/api/public/data 2

我正在使用Restler在Apache服务器上构建RESTAPI,我遇到了一些url重写问题。
以下是我的目录:

/api:
/供应商

.htaccess(第一级)
/公众:
/示例
/测试
/src
.htaccess(第二级)
/浏览器:
/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>

重新启动发动机
重写规则^/$explorer/[QSA,L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.php[QSA,L]
php_标志显示上的错误
对于第二级.htaccess

有什么建议吗?谢谢你

这条规则:

RewriteRule ^/$ explorer/ [QSA,L]
不会起作用,因为达到该规则的请求将删除前导斜杠:

RewriteRule ^$ explorer/ [QSA,L]
但我也不确定这是你想要的,因为为了达到这个规则,你需要去:

http://mydomain.com/api/

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

谢谢!只剩下一件事,资产(css、图像、js)没有加载。在chrome控制台中,例如一个js文件:因此它缺少explorer/!请注意,我只是从我的原始帖子中删除了[L,R=301],因为它显示了我不想要的最终URL。@cocoggu不确定如何修复断开的链接。相对URL链接和在mod rewrite中删除路径节点的混乱永远不会混合在一起。您要么修复所有链接以使用公共基本URL,要么移动资产以使用相对URL访问它们