Heroku silex路线显示404除了" /"

时间:2017-01-22 14:26:46

标签: php heroku silex

这段代码来自heroku的一个例子。但除了路线/,我添加的任何其他东西都不起作用。它显示404:

  

在此服务器上找不到请求的URL / e。

$app->match('/', function(Symfony\Component\HttpFoundation\Request $request) use ($app) {
    return $app['twig']->render('index.twig');
});

$app->match("/dump", function(Symfony\Component\HttpFoundation\Request $request) use ($app) {
    return new Response('Thank you for your feedback!', 201);
})->bind("dump");
$app->get("/t", function() use ($app) {
    return new Response('Thank you for your feedback!', 201);
})->bind("t");
$app->get("/d", function() {
    return new Response('Thank you for your feedback!', 201);
})->bind("d");
$app->get("/e", function() {
    return new Response('Thank you for your feedback!', 201);
});
$app->run();

修改1 我直接在heroku服务器上部署了它(每次推送到主分支时都是heroku自动构建)

编辑2 我的工作空间:

bin\worker.php
www\index.php <== the snippet is from this file
www\list.php
apache_app.conf
app.php  <== basic init, return Silex\Application $app
Procfile

this link复制apache_app.conf的内容。     RewriteEngine On

RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]

RewriteRule .? %{ENV:BASE}/app.php [L]

我认为我需要以某种方式更改apache配置,但我不了解htaccess语法。

3 个答案:

答案 0 :(得分:1)

对于apache2,您可以在“/ web”

中添加.htaccess文件
<IfModule mod_rewrite.c>
    Options -MultiViews

    RewriteEngine On
    #RewriteBase /path/to/app
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
</IfModule>

并将Procfile设置为:

web: vendor/bin/heroku-php-apache2 web/

对于nginx,创建一个包含内容的nginx conf文件:

location / {
    # try to serve file directly, fallback to rewrite
    try_files $uri @rewriteapp;
}

location @rewriteapp {
    # rewrite all to index.php
    rewrite ^(.*)$ /index.php/$1 last;
}

location ~ ^/(index|index_dev)\.php(/|$) {
    try_files @heroku-fcgi @heroku-fcgi;
    internal;
}

并将Procfile设置为:

web: vendor/bin/heroku-php-nginx -C server_conf/nginx.conf web/ 

答案 1 :(得分:1)

这非常简单,只需安装apache即可:

composer require apache-pack

答案 2 :(得分:0)

我遇到了同样的问题,它困扰了我好几个星期……到我刚开始使用/作为唯一途径并通过传入变量添加其他功能的地步。把我拖到墙上。

我终于有必要进行实际修复,几个小时后找到了这篇文章:

https://laracasts.com/discuss/channels/laravel/laravel-v5415-on-heroku-all-routes-but-not-working

TL / DR;我已经复制了一个(正确工作的)heroku存储库来创建我的新存储库,并且在删除web/.htaccess文件的途中。我更换了它,一切都变得像魅力。

对我来说,提供的测试也很好用(我使用的是PHP):如果eaxmple.com/ROUTE不起作用,但是example.com/index.php/ROUTE 可以 工作...您遇到.htaccess问题。

此外,以下是我的整个.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

希望这可以为某人节省一些搜索...