如何摆脱虚拟主机上我的 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>
我正在制作一个 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>