“找不到对象!” OSX、Silex 和 XAMPP 开发环境

Posted

技术标签:

【中文标题】“找不到对象!” OSX、Silex 和 XAMPP 开发环境【英文标题】:"Object Not Found!" OSX, Silex and XAMPP development environment 【发布时间】:2017-02-04 10:25:36 【问题描述】:

我整天都在为设置 php/mysql 环境而苦苦挣扎,我想我终于可以寻求帮助了。

我已经启动并运行了 XAMPP。为了在我喜欢的目录中工作,我更新了/Applications/XAMPP/xamppfiles/etc/httpd.conf

User MY_USERNAME

...

DocumentRoot "/Users/PATH/TO/WORKING/DIR/web"
<Directory "/Users/PATH/TO/WORKING/DIR/web">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/trunk/mod/core.html#options
    # for more information.
    #
    #Options Indexes FollowSymLinks
    # XAMPP
    Options Indexes FollowSymLinks ExecCGI Includes

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    #AllowOverride None
    # since XAMPP 1.4:
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

否则我的 httpd.conf 设置是 XAMPP 默认值。在我的web 目录中,我有 index.php:

<?php

require_once __DIR__."/../vendor/autoload.php";

$app = new Silex\Application();

$app->get("/", function () 
    return "Hello World";
);

$app->get("/test", function () 
    return "Success";
);

$app->run();

?>

如果我转到localhost,我会得到预期的“Hello World”。但是,如果我去 localhost/test 我会得到:

找不到对象!

在此服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。

如果您认为这是服务器错误,请联系网站管理员。

错误 404

本地主机 Apache/2.4.23 (Unix) OpenSSL/1.0.2h PHP/5.6.24 mod_perl/2.0.8-dev Perl/v5.16.3

这是一个非常简化的示例,但说明了问题。

我已针对此错误搜索了 Google 结果,但推荐的建议都没有帮助:

很多人建议我更新 .htaccess,但我不知道它在 XAMPP 中的什么位置,或者我应该在哪里创建它,或者我应该在其中放入什么或它是什么。 在httpd.conf 中将AllowOverride None 更改为AllowOverride All 的建议似乎不起作用。 (在确认没有帮助后,我将其恢复为默认设置)

任何帮助将不胜感激!感谢您的宝贵时间!

解决方案

我在/Users/PATH/TO/WORKING/DIR/todo 中创建了.htaccess,我需要将它放在我指向XAMPP 的/Users/PATH/TO/WORKING/DIR/todo/web 中。然后在.htaccess里面我把Silex告诉我的东西放进去:http://silex.sensiolabs.org/doc/master/web_servers.html

【问题讨论】:

你需要重写。似乎您希望 localhost/test 成为对 index.php 的调用。到目前为止,我在您的配置中看不到任何会导致 apache 以这种方式做出反应的东西。 .htaccess 文件位于可通过您的 apache 配置访问的任何文件夹中,请参见例如。 httpd.apache.org/docs/current/howto/htaccess.html 这样你就可以控制重写了。 【参考方案1】:

.htaccess 需要在您的 Web 应用程序的根目录下,所以在 web 中。如果它不存在,请创建它。它应该包含这里指出的内容http://silex.sensiolabs.org/doc/master/web_servers.html

AllowOverride All 确实需要,但如果您的网络应用程序文件夹中没有任何.htaccess 文件,那么它的工作机会为 0。

【讨论】:

这成功了!当我需要输入 /PATH/project_folder/web 时,我已经将 .htaccess 文件放入了 /PATH/project_folder 中,我猜是我将 XAMPP 指向的地方。谢谢! 如果它解决了您的问题,请考虑投票并接受答案(只要 *** 允许您这样做):-) 赞成并接受(虽然我的赞成票还没有被 Stack Overflow 计算在内)

以上是关于“找不到对象!” OSX、Silex 和 XAMPP 开发环境的主要内容,如果未能解决你的问题,请参考以下文章

自定义错误页面中的 Silex 和 Twig 助手

Silex - 选项方法

AngularJS 和 Silex 的 CORS 问题(PHP - Apache)

如何在 Silex 框架中使用 YAML 配置文件

使用 Silex/SilexExtensions 和 Assetic 在 Twig 中动态 CSS/Javascript

未找到Silex控制器