这段代码来自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语法。
答案 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]
希望这可以为某人节省一些搜索...