【问题标题】:Htaccess mod rewrite don't workHtaccess mod重写不起作用
【发布时间】:2015-10-28 11:28:10
【问题描述】:

我有一个包含两个应用程序的项目:一个前端(在 AngularJs 中)和一个后端(在 Phalcon 中)。我的服务器文档根目录有两个文件夹和一个 htaccess:

public_html
 - api
     - controllers
     - index.php
 - app
 - .htaccess

.htaccess 有如下配置:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^api/(.*)$ api/index.php?_url=/$1 [QSA,L]
</IfModule>

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

所以,当我向http://mydomain/api/sessions 发送 POST 请求(例如)时,结果是 404 not found。路由器配置为:

$router->addPost('/sessions', array(
    'controller' => 'sessions',
    'action' => 'post'
));

在我的本地主机中,此配置可以正常工作。但是,在我的 VPS 中没有。 有什么想法吗?

更新 1:

如果我不使用任何 REST 服务,则通过 http://mydomain/api 访问 Phalcon 索引控制器已加载。

更新 2:

如果我尝试使用像http://mydomain/api/index.php?_url=/licenses 这样的 Phalcon url 访问 REST 服务,效果很好。

【问题讨论】:

    标签: apache .htaccess mod-rewrite phalcon


    【解决方案1】:

    您有时可以在文档根目录中使用相对路径替换,但是,您应该使 RewriteRule 替换根相对(以斜杠开头),或在启用重写引擎后指定 RewriteBase / 指令为了明确指定 URL 前缀。

    重写规则 ^api/(.*)$ api/index.php?_url=/$1 [QSA,L]

    变成:

    RewriteRule ^api/(.*)$ /api/index.php?_url=/$1 [QSA,L]
    

    【讨论】:

    • 如果在浏览器中做一个GET请求呢?
    【解决方案2】:

    我发现了问题。虚拟主机配置文件没有下一行:

    <Directory "/var/www/domain/public_html">
       Options All
       AllowOverride All
       Allow from all
    </Directory>
    

    【讨论】:

    • 啊,.htaccess 文件根本没有被处理?因此,直接在浏览器中请求http://mydomain/api/sessions 也会导致我假设的 404。对http://mydomain/api的请求不匹配RewriteRule无论如何都要简单地加载http://mydomain/api/index.php(在Apache上使用适当的选项)。 span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多