如何摆脱虚拟主机上我的 laravel 5.1 链接中的 'index.php'

How to get rid off 'index.php' in my laravel 5.1 links on Virtual Host

我正在制作一个 link 控制器的功能驻留在名为 'Admin' 的控制器目录的子目录中。当我使用以下代码在菜单栏中创建 link 时:

{!! HTML::link('/admin', 'Admin') !!}  // www.property.com/admin

它不起作用,但是如果我像这样在“/admin”前面加上 'index.php/admin' 前缀:

{!! HTML::link('index.php/admin', 'Admin') !!}  // www.property.com/index.php/admin

它工作正常。问题是什么?我怎样才能摆脱在我的每个 link 之前添加 'index.php',比如 'admini'? 注意 我在 Ubuntu 15.04 上使用名为 'www.property.com' 的虚拟主机。 这是我的 AdminController ```

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class AdminController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
        return view('admin.index');
    }
?>

这是我的路线文件

Route::resource('/', 'HomeController');

Route::resource('/admin', 'Admin\AdminController');

这是 .htaccess 文件的代码:

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

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ / [L,R=301]

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

虚拟主机文件代码如下:

<VirtualHost *:80>
    ServerAdmin m.khuramj@live.com
    ServerName laravelproperty.com
    ServerAlias www.laravelproperty.com

    DocumentRoot /var/www/property-project/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

如果您使用的是 Apache,请确保 public 文件夹中的 .htaccess 存在。

如果不是这种情况,请在 public 文件夹中创建一个包含以下内容的 .htaccess:

Options +FollowSymLinks
RewriteEngine On

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

如果仍然无法正常工作,请确保 Apache 中的 mod_rewrite 模块已启用 :)。

经过几个小时的努力,我找到了这个问题的解决方案。虽是矿工,但耗费了很多时间。

在我的虚拟主机文件中添加如下代码:

    <Directory /var/www/property-project/public/>
        AllowOverride All
    </Directory>

你可以对比一下这个和上面问题给出的虚拟主机代码的区别

<VirtualHost *:80>
    ServerAdmin m.khuramj@live.com
    ServerName laravelproperty.com
    ServerAlias www.laravelproperty.com

    DocumentRoot /var/www/property-project/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/property-project/public/>
        AllowOverride All
    </Directory>
</VirtualHost>