没有index.php的路由不起作用

时间:2014-02-09 17:26:36

标签: php laravel laravel-routing

我正在使用laravel 4.

我有一个视图nest.blade.php和相应的控制器NestController.php:

控制器内容:

class NestController extends BaseController {

    public function showView()
    {
        return View::make('nest');
    }

}

路线:

Route::get('/nest', 'NestController@showView');

当我去url / nest时它不起作用。 当我去url / index.php / nest时,它确实有效。

显然我只是希望它没有index.php而/ nest。

我该如何解决这个问题?

我的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>

8 个答案:

答案 0 :(得分:8)

漂亮的网址

  

该框架附带了一个用于允许的public / .htaccess文件   没有index.php的网址。如果您使用Apache来为Laravel提供服务   应用程序,请务必启用mod_rewrite模块

如果Laravel附带的.htaccess文件无法与您的文件一起使用  Apache安装,试试这个:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

要获得更多相关帮助,请查看this answer

答案 1 :(得分:3)

我在Apache HTTP服务器中启用了mod_rewrite模块,重新启动了Apache服务并再次进行了测试并且工作正常!

以下是我用来启用mode_rewrite;

的代码

1)在Apache / conf / httpd.conf

中取消这一行
  

LoadModule rewrite_module modules / mod_rewrite.so

2)为&#34; sample-project&#34;创建一个新配置。无需修改httpd.conf文件中的默认配置

Directory "C:/Apache24/htdocs/sample-project">
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  Allow from all
Directory>

答案 2 :(得分:2)

警惕!如果启用重写模块后仍无法正常工作。您需要更改行&#34; AllowOverride None&#34; to&#34; AllowOverride All&#34;在httpd.conf中。

由于@The Alpha警告,Laravel不需要为此目的进行配置。

答案 3 :(得分:1)

当您在AllowOverride None中将行AllowOverride All更改为httpd.conf时,请确保在包含有效路径的<directory ...>内进行此操作。

实施例

<Directory "/var/www/html"> #check path
   Options Indexes FollowSymLinks
   AllowOverride All
</Directory>

答案 4 :(得分:0)

在您的.htaccess中设置

DirectoryIndex index.php

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

RewriteEngine On

RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]

RewriteRule .? %{ENV:BASE}/index.php [L]

答案 5 :(得分:0)

由于某些原因,以上答案对我不起作用,因此这是唯一对我有用的答案。

我正在使用 ubuntu 18.04 amd64 作为开发服务器环境。 因此,我修改了 apache.conf 位于 /etc/apache2

的文件
  
    

发件人:

  
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted
  
    

收件人:

  
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted
  
    

而且来自:

  
<Directory /usr/share> AllowOverride None Require all granted
  
    

收件人

  
<Directory /usr/share> AllowOverride All Require all granted

之后,您需要在终端中使用apache命令重新启动sudo service apapche2 restart

现在,无需使用URL中的index.php即可访问页面

贷方转到: joshymatheww @ @ Laracasts servers discussion channel on Aug 5, 2017

答案 6 :(得分:0)

登录到终端

sudo nano /etc/apache2/apache2.conf

行后

<Directory /var/www/>
.
.
.
</Directory>

并粘贴以下代码

<Directory /var/www/html/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
</Directory>

现在按Ctrl + O,然后按Ctrl + M,再按Ctrl + x

现在重新启动apache服务器

sudo service apache2 restart

答案 7 :(得分:0)

尝试以下.htaccess。在服务器或本地主机环境上,我从未遇到任何麻烦。

DirectoryIndex index.php

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

        RewriteEngine On

        RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
        RewriteRule ^(.*) - [E=BASE:%1]

        RewriteCond %{ENV:REDIRECT_STATUS} ^$
        RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

        RewriteCond %{REQUEST_FILENAME} -f
        RewriteRule .? - [L]

        RewriteRule .? %{ENV:BASE}/index.php [L]

    </IfModule>