【问题标题】:Url Rewrite in a subdirectory子目录中的 URL 重写
【发布时间】:2013-12-28 16:17:09
【问题描述】:

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

/api:
/供应商
...
.htaccess(第一级)
/公共:
/示例
/测试
/src
.htaccess(第二级)
/探险家:
/css
/图片
/lib
index.html

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

2)我希望“公共”目录的根目录是 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

有什么建议吗?谢谢

【问题讨论】:

    标签: php apache .htaccess url-rewriting restler


    【解决方案1】:

    这条规则:

    RewriteRule ^/$ explorer/ [QSA,L]
    

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

    RewriteRule ^$ explorer/ [QSA,L]
    

    但我也不确定这是否是您想要的,因为为了达到该规则,您需要访问:

    http://mydomain.com/api/
    

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

    【讨论】:

    • 谢谢!只剩下一件事,资产(css、图像、js)没有加载。在 chrome 控制台中,例如一个 js 文件:mydomain.com/api/public/lib/handlebars-1.0.rc.1.js 所以它缺少资源管理器/!
    • 请注意,我只是从原始帖子中删除了 [L,R=301],因为它显示了我不想要的最终 URL。
    • @cocoggu 不确定如何修复损坏的链接。相对 URL 链接和在 mod 重写中删除路径节点的混乱将永远混合。您要么必须修复所有链接以使用通用基本 URL,要么移动资产以便使用相对 URL 访问它们
    猜你喜欢
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多