【问题标题】:Using apache to serve a js app and its api使用 apache 为 js 应用程序及其 api 提供服务
【发布时间】:2015-05-13 15:59:02
【问题描述】:

所以在 localhost 中工作时,我有以下文件夹结构

/htdocs
    /multikanban      # the js app
    /multikanban-api  # the php api

为了从 js 应用程序向 php api 发出请求,我基本上使用了相对路径。

现在我正在尝试将其部署到我的专用服务器。我设法让这两个项目在http://multikanban.com(应用程序)和http://api.multikanban.com(api)下工作。但是,从应用程序向 api 发出请求需要 CORS,因为使用子域被认为不是域的一部分。我不想使用 CORS,因为这个 api 只会被应用程序使用。这就是我将 multikanban-api 文件夹移动到 multikanban 文件夹并尝试使用相对路径的原因。

到目前为止,由于我的 .htaccess 和 apache 配置,我发现了一些问题。

apache 配置看起来像

#
#  multikanban.com (/etc/apache2/sites-available/multikanban)
#
<VirtualHost *:80>
        ServerAdmin mezood@gmail.com
        ServerName  multikanban.com
        ServerAlias www.multikanban.com

        # Indexes + Directory Root.
        # DirectoryIndex /app/index.html
        DocumentRoot /var/www/multikanban/app/
</VirtualHost>

虽然应用程序的 .htaccess 看起来像

# html5 pushstate (history) support:

<ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !index
    RewriteCond %{REQUEST_URI} !multikanban-api 
    RewriteRule (.*) app/index.html [L]
</ifModule>

这基本上是骨干的 pushstate 工作的配置,但我添加了 RewriteCond 以忽略 multikanban-api,这样 url 就不会被理解为应用程序的路由。

问题是使用此配置http://multikanban.com/multikanban-api 将返回未找到。我知道这是因为 DocumentRoot 是 /multikanban/app 而不仅仅是 /multikanban。这就是我试图定义的原因

 DocumentRoot /var/www/multikanban/ 
 DirectoryIndex /app/index.html

但这根本不起作用。访问 http://multikanban.com 会返回 require.js SyntaxError 并且甚至不会加载应用程序。

关于如何解决此问题或解决如何在不使用 CORS 的情况下访问 /multikanban-api 的任何想法?

【问题讨论】:

    标签: javascript apache .htaccess api backbone.js


    【解决方案1】:

    我想了想,也许你需要做一些类似虚拟目录的事情? http://w3shaman.com/article/creating-virtual-directory-apache

    <IfModule alias_module>
    Alias /multikanban-api /htdocs/multikanban-api
    </IfModule>
    

    为什么要避免 CORS?

    我不知道您的设置以何种方式不起作用,但请撤出所有 JavaScript 应用程序,只在主站点上有一个 HTML 页面,并在 API 中完成一个简单的 JavaScript AJAX 调用。

    另外使用 Postman 之类的工具来验证 API 是否按预期工作。

    基本上不断简化您的堆栈,诸如 Require 之类的东西可能会妨碍您。让每个部分独立运行,您可能只是太早地试图将它们全部组合在一起。

    【讨论】:

    • CORS 增加了复杂性,我在这里不需要它,因为 js 应用程序是唯一使用 api 的应用程序。问题是找不到 api,我得到一个 not found for multikanban.com/multikanban-api
    猜你喜欢
    • 2020-07-02
    • 2022-08-14
    • 1970-01-01
    • 2017-02-07
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2020-09-27
    相关资源
    最近更新 更多