【发布时间】:2013-03-15 23:08:23
【问题描述】:
我已经在几个不同的服务器上成功地运行了 Slim 应用程序,并且今天尝试使用相同的结构在 AppFog 上设置一个,但它没有正常运行。
我将从我的目录结构开始:
.htaccess
/public
.htaccess
index.php
/routes
/Slim
root .htaccess 文件包含来自 AppFog 文档的 DocumentRoot 代码。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^brs.aws.af.cm$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.brs.aws.af.cm$
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]
/public 目录是我的 api 代码所在的位置,目前是 Slim index.php 和 .htaccess 文件。 index.php 文件包含两个简单的路由:
require '../Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
// Default GET route
$app->get('/', function () {
echo "Default GET route";
});
// Hello World route
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
服务器设置在http://brs.aws.af.cm/,我在下面列出了主要路线:
- / => 使用默认的 GET 路由
- /hello/john => 404 错误
- /public/hello/john => 有效,但在 url 中需要“/public”
还有一些额外的怪异之处。七个字符的路由会导致 404 错误,六个或更少会使用默认的 GET 路由。
- /123456 => 不应该工作,但使用默认的 GET 路由
- /1234567 => 404 错误
我完全被难住了。我认为它与 DocumentRoot 代码有关,但我不确定到底是什么。我也试过设置
RewriteBase /public/
在 /public/.htaccess 中,但它似乎没有任何影响。
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
我不熟悉 AppFog,但是您是否尝试过删除您的 root .htaccess 文件并包括公共目录的 .htaccess 下的那些文件?还消除了公共的 RewriteRule 并重写为 index.php/$1
-
@GaryM 谢谢。我尝试了您的建议,但是 root 目录在技术上是 Web 根目录,所以我认为需要第一个 .htaccess 文件才能实际重定向到 /public/ 目录。
-
我自己也遇到了与 AppFog 相同的问题。你找到解决办法了吗?
-
对此也有任何解决方案