从URL中移除index.php,Laravel 5.2

时间:2016-09-20 15:09:17

标签: php .htaccess laravel mod-rewrite laravel-5.2

我看了很多例子并尝试了很多解决方案但没有成功! 我试图用apache将我的项目放到Ubuntu服务器上。

当我做的时候一切正常:

"/MYEXAMPLE/public/index.php/dashboard" 

但我想:

"/MYEXAMPLE/public/dashboard"

还有问题!

  

“在此服务器上找不到请求的URL / MYEXAMPLE / public / dashboard。”

我的 apache服务器有de mod_rewrite。

我的项目文件夹是:

     - MYEXAMPLE
     --------- server.php
     --------- public
     ----------------.htaccess.php 
     ----------------.index.php 
     ---------------- views

我的.htaccess.php:

<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 ^(.*)/$ /$1 [L,R=301]

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

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

的index.php:

<?php //


require __DIR__ . '/../bootstrap/autoload.php';


$app = require_once __DIR__ . '/../bootstrap/app.php';


$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
        $request = Illuminate\Http\Request::capture()
);

$response->send();

$kernel->terminate($request, $response);

我不想从公共文件夹中删除我的观点!当我使用wamp服务器时,一切正常,我不需要在URL上使用index.php。现在我正在尝试使用Ubuntu服务器,但URL不起作用,因为我需要index.php

其他例子:如果我访问

/MYEXAMPLE/public/

/MYEXAMPLE/public/index.php

按照我的要求进入主页。当我试图改变到其他页面时他的问题!

解决问题的任何消息?为什么一切都运行wamp并且当我尝试使用Ubuntu服务器时,我需要URL上的index.php?

提前致谢

2 个答案:

答案 0 :(得分:3)

您需要point web server to public directory并使用普通网址,例如/public/index.php/dashboard而不是DocumentRoot "/path_to_laravel_project/public" <Directory "/path_to_laravel_project/public">

<VirtualHost some.app:80>
    DocumentRoot "/path_to_laravel_project/public"
    ServerName some.app
    ServerAlias some.app

    <Directory "/path_to_laravel_project/public">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

此外,您可以使用此working Apache virtual host configuration for Laravel

cxView.ApplyBestFit();

答案 1 :(得分:1)

有两个解决方案。 1.将您的.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]

2.dont编辑您的代码,仅在cmd中运行

 php artisan serve

我为您提供了第二个解决方案