【问题标题】:Allowing relative paths only仅允许相对路径
【发布时间】:2016-05-01 21:33:33
【问题描述】:

我相信这是一个 Apache .htaccess 问题,但也许不是。也许我从错误的角度看待问题,因此找不到合适的解决方案。

我正在构建一个 Web 应用程序 + 混合移动应用程序。我想共享完全相同的代码库,而无需手动调整任何东西来将我的应用程序部署到 Android 或 iOS,否则,部署过程将是麻烦和痛苦的。我想要的是获取 Web 应用程序存储库,将其推入 Cordova 的 box (你这个肮脏的人;),它会成功部署它。

现在,一个问题是 Cordova 需要相对路径才能正常工作。例如,这就是我包含 require.js 文件的方式:

<script data-main="library/js/dependencies.js" src="library/js/libs/require.js">
</script>

这在混合应用上运行良好。这也适用于大多数 Web 应用程序的 URL,具有以下方案的 URL:

domain.com/view_name

但是,当我从接收 URI 参数的视图加载应用程序时会发生这种情况:

domain.com/view_name/6iwO4NyJqy

不再正确解析相对路径。由于路径不正确,我得到404 error。例如,上面的require.js文件是这样解析的:

http://domain.com/view_name/library/js/libs/require.js

view_name 位是错误的部分。它不应该在那里。没有它,文件将被成功找到。

这是我的.htaccess 文件:

RewriteEngine on
RewriteBase /

# REROUTING EVERYTHING TO index.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule .* /index.html [NC,L,QSA]

有没有办法设置我的.htaccess 文件,这样我就不需要修改应用程序中的相对路径,并且仍然可以正确解析它们?

欢迎提出任何建议。

【问题讨论】:

  • 不是你的重写规则造成的,是你使用了相对路径造成的。您可以在页面 HTML 的 &lt;head&gt; 部分下方添加此代码:&lt;base href="/" /&gt;
  • 你这个摇滚老兄。谢谢。我不知道这个&lt;base/&gt; 标签,因此无法正确制定解决方案。您应该将此评论作为答案;)

标签: apache .htaccess cordova mod-rewrite relative-path


【解决方案1】:

这不是由您的重写规则引起的,而是由于您使用了相对路径。

您可以在页面 HTML 的 &lt;head&gt; 部分下方添加此内容:

<base href="/" />

这样每个相对 URL 都是从该基本 URL 而非当前页面的 URL 解析的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多