【问题标题】:Unable to access routes without index.php in Laravel 4在 Laravel 4 中无法访问没有 index.php 的路由
【发布时间】:2014-02-07 10:20:28
【问题描述】:

好的,所以我花了相当多的时间在谷歌上搜索这方面的建议,尽管之前在 WAMPserver 上在 Laravel 4 中设置了几个测试项目,但我不确定在这种情况下我缺少什么。希望我已经提供了有关我的设置以及迄今为止我尝试过的所有必要细节。

WAMPserver 2.4 版,位于 C:/wamp/
Apache 版本 2.4.4
PHP 版本 5.4.12
启用了 mod_rewrite(我可以在 phpinfo() 中看到它)
项目位于 C:/wamp/www/wsrp/

C:/wamp/www/wsrp/public 我有以下 .htaccess 文件:

<IfModule mod_rewrite.c>
  <IfModule mod_negotiation.c>
    Options -MultiViews
  </IfModule>

  RewriteEngine On

  # Redirect Trailing Slashes...
  RewriteRule ^(.*)/$ /$1 [L,R=301]

  # Handle Front Controller...
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [L]
</IfModule>

在我的 C:/wamp/bin/apache/Apache2.4.4/conf/httpd.conf 文件中,我取消了对这一行的注释:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

在我的 C:/wamp/bin/apache/Apache2.4.4/conf/extra/httpd-vhosts.conf 文件中,我有以下内容:

<VirtualHost *:80>
    DocumentRoot "C:\wamp\www"
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/wamp/www/wsrp/public"
    ServerName localhost
    Options Indexes FollowSymLinks
    <Directory "C:/wamp/www/wsrp/public">
        AllowOverride All
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    </Directory>
</VirtualHost>

在我的 C:/wamp/www/wsrp/app/routes.php 文件中,我有这个测试路线:

Route::get('test', function() {
    echo 'Hello world!';
});

为了测试我正在尝试访问这个 URL:

http://localhost/wsrp/test

这不起作用,它显示了一个内部服务器错误页面。但是,如果我访问此 URL:

http://localhost/wsrp/index.php/test

我看到了我的“Hello world!”显示消息。

显然我希望能够在 URL 中没有 index.php 的情况下处理这个项目,这就是问题所在。

在我看过的所有 SO 问题/答案中,他们都建议添加一个虚拟主机,我已经这样做了,在 C:/wamp/www/wsrp/public 中有正确的 .htaccess 文件/ 我已经完成了,启用了mod_rewrite,我已经完成了,是的.. 不知道还有什么可以尝试,或者我错过了什么。非常感谢您的帮助和建议!

编辑:

忘了说我在C:/wamp/alias/wsrp.conf

中还有一个别名文件
Alias /wsrp "c:/wamp/www/wsrp/public"

<Directory "c:/wamp/www/wsrp/public">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
    Allow from all
</Directory>

【问题讨论】:

  • 在您的 vhosts 文件中添加 DirectoryIndex index.php index.html 指令
  • 尝试将其添加到 vhost 文件中,如下所示:&lt;VirtualHost *:80&gt; DocumentRoot "C:/wamp/www/wsrp/public" ServerName localhost Options Indexes FollowSymLinks &lt;Directory "C:/wamp/www/wsrp/public"&gt; AllowOverride All Order Deny,Allow Deny from all Allow from 127.0.0.1 DirectoryIndex index.php index.html &lt;/Directory&gt; &lt;/VirtualHost&gt; 并重新启动 WAMPserver,但仍然出现相同的错误。
  • 不要将其添加到Directory 块中;就在VirtualHost 块中
  • 糟糕,将其移至 VirtualHost 块中,重新启动服务器,但仍然没有骰子。只是为了检查一下,它不需要位于这个块上方的主 localhost vhost 中吗?另外,DirectoryIndex 相对于块的其余部分的顺序是否重要?
  • Directory 块完全不相关,因为 apache 设置的根目录 www 包含所需的所有信息,包括 httpd.conf 中默认的 AllowOverride all

标签: php laravel laravel-routing


【解决方案1】:

首先,为什么你有一个 localhost v-host? WAMP 服务器的根目录通常是 c:/wamp/www,它已经被 HOSTS 映射到 127.0.0.1 或 localhost。那个 v-host 是无关紧要的。

其次,由于您的 c:/wamp/www 目录被用于包含您的网站,httpd.conf 已经包含它需要的 &lt;Directory&gt; 详细信息,从内存中它看起来像:

<Directory c:/wamp/www>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require local
</Directory>

您不需要为子目录定义任何特殊的目录信息,除非您想添加特定的模块配置或更改任何默认值。要让您的虚拟主机正常工作,您只需添加以下内容:

<VirtualHost *:80>
    ServerName mylocalsite.dev
    DocumentRoot c:/wamp/www/mysite/public
</VirtualHost>

不过,我建议您放置错误记录/访问记录的位置。

【讨论】:

  • 抱歉忘记在 OP 中添加我也有别名文件(添加到 OP),我想这也会有影响吗?我一生都无法弄清楚出了什么问题,我之前在 WampServer 上安装过 Laravel,但 URL 中没有 index.phppublic ..
【解决方案2】:

我遇到了和你一样的问题。我就是这样解决这个问题的。

  1. 打开C:\wamp\bin\apache\Apache2.4.4\conf/httpd.conf
  2. 然后,您可以搜索下一行,#LoadModule rewrite_module modules/mod_rewrite.so
  3. 删除开头的井号 ('#')保存文件。
  4. 接下来,重新启动您的 WampServer 并进行测试。

希望能帮到你!

【讨论】:

  • 如 OP 中所述,不幸的是,我已经启用了 mod_rewrite,所以这对我没有帮助。
  • @JamesVassie 你应该需要提到它,你不需要放弃他的观点,我已经测试过它并且它对我有用,我放弃了他。谢谢古斯托科
  • @UsmanAli 不太明白你的意思。正如我之前的评论和 OP - 我已经提到我启用了 mod_rewrite,所以不幸的是,他的回答不会有任何帮助。
  • 尽管它可能不是 OP 的正确答案,但我偶然发现了这篇文章,这个答案为我提供了解决方案。
猜你喜欢
  • 2021-05-09
  • 2018-12-15
  • 2014-11-25
  • 2014-06-25
  • 2015-04-12
  • 2013-12-20
  • 1970-01-01
  • 2021-12-08
  • 2014-11-14
相关资源
最近更新 更多