【问题标题】:Lumen routes not working without index.php没有 index.php 的流明路由不起作用
【发布时间】:2016-02-29 15:08:50
【问题描述】:

我在 Vagrant VM (ubunty/trusty64) 中安装了 lumen。在我的 Vagrantfile 中启用了config.vm.network "private_network", ip: "192.168.33.10"

我在VM里面的目录结构是

var
 - www
  -html
   -app
   -bootstrap
   -database
   .... so on.

我在 VM /etc/apache2/sites-available/api.dukaan.pk 中创建了一个虚拟主机,内容如下

<VirtualHost *:80>
    ServerAdmin admin@api.dukaan.pk
    ServerName api.dukaan.pk
    ServerAlias www.api.dukaan.pk
    DocumentRoot /var/www/html/public
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

然后我用sudo a2ensite api.dukaan.pk.conf 启用它。重启 apache 几次都没成功。

然后在我的主机 Windows 10 中输入192.168.33.10 api.dukaan.pk

现在在我的 app/Http/routes.php 我定义了两条路由

$app->get('/', function () use ($app) {
    return $app->welcome();
});
$app->get('/hello', function() {
    return 'Hello World';
});

如果我转到 http://api.dukaan.pk/index.php/hello 它可以工作,但如果我从这个 URL 中删除 index.ph,例如 http://api.dukaan.pk/hello,它会显示 404 page not found 错误。

我的app/public 目录中有默认的.htaccess 和index.php 文件。

请帮我摆脱这个 index.php 文件

谢谢

【问题讨论】:

  • 关心发布与index.php 一起出现的.htaccess
  • .htaccess 不会出现 404 错误?
  • 我在api.dukaan.pk.conf 中添加了AllowOverride All 行,现在它工作正常。但我不知道我做了什么只是复制粘贴。如果你们中的任何人都可以发布一个解释原因的答案,以便它也可以帮助其他人。谢谢
  • 基于docs 当此指令设置为 All 时,任何具有 .htaccess 上下文的指令都可以在 .htaccess 文件中使用。 也许您应该发布您的解决方案作为答案,它可能会帮助其他人。 :)

标签: php apache vagrant laravel-5.1 lumen


【解决方案1】:

在您的虚拟机中运行的 apache 实例中,您定义的 VHost 在端口 80 中运行。您需要能够从您的主机(Windows)访问在您的来宾(ubuntu)中运行的此端口80

在您的Vagrantfile 中,您可以定义端口转发来执行此操作。将此行添加到您的 Vagrantfile 中,如 here 所述:

config.vm.network :forwarded_port, guest: 80, host: 80, auto_correct: true

如果端口80 已经被另一个进程/服务器/任何东西在您的主机(Windows)中使用,您可以为主机设置另一个端口而不是80,例如:

config.vm.network :forwarded_port, guest: 80, host: 8080, auto_correct: true

【讨论】:

    【解决方案2】:

    这个解决方案对我有用。我在我的api.dukaan.pk.conf 文件中添加了AllowOverride All 标志,就像这样

    <VirtualHost *:80>
        ServerAdmin admin@api.dukaan.pk
        ServerName api.dukaan.pk
        ServerAlias www.api.dukaan.pk
        DocumentRoot /var/www/html/public
        <Directory /var/www/html/public>
          AllowOverride All
        </Directive>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    

    这里是根据 @tezla 评论对这项更改起作用的解释

    基于文档 当此指令设置为 All 时,则任何 在 .htaccess 中允许具有 .htaccess 上下文的指令 文件。

    【讨论】:

      【解决方案3】:

      如果您想在子目录中运行 lumen,请使用别名,此方法对我有用,希望对其他人有所帮助。

      在您的 Apache 配置文件中,该文件在启用站点的目录中启用,

      在您的 DocumentRoot /var/www/html/ 之后

      添加Alias /api "/var/www/html/&lt;directoryname&gt;/public" 注意没有斜杠

      和,

      <Directory /var/www/html/<directoryname>/public>
            AllowOverride All
      </Directory>
      

      其余的都照原样。这应该可以完成工作。

      【讨论】:

        猜你喜欢
        • 2014-03-06
        • 1970-01-01
        • 2015-04-12
        • 2015-07-03
        • 2015-06-23
        • 2015-11-23
        • 1970-01-01
        • 2023-04-02
        相关资源
        最近更新 更多