Laravel 5.2漂亮网址

时间:2016-06-09 06:20:47

标签: php .htaccess laravel laravel-5.2 vhosts

如何将http://domain.com/public/index.php更改为http://domain.com,并且除('/')以外的其他路线是否有效?

解决方法1:

vhost文件:

<VirtualHost *:80>   
    DocumentRoot "/var/www/html/domain/public"
    ServerName domain.com
    <Directory "/var/www/html/domain/public">
        AllowOverride All
        Allow from All
    </Directory>

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

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>

使用此设置,是的我可以设置http://domain.com但是当我尝试调用另一条路线时,获得404.这背后的原因是你可以看到我设置了我的根文件夹作为公众。所以我的路线无法到达目的地(就像那些被引导到我的控制器的路由,因为我的控制器不在公共文件夹中)。

解决方法2:
如果我将文档根目录和目录更改为/var/www/html/domain/,这次我丢失了我的漂亮网址,只有这样我才能通过输入http://domain.com/public/index.php来请求主页。

请注意,我使用的是ubuntu 14.04。

你有什么建议?

--- ---更新
路线示例:

Route::get('myroute', array(
   'uses' => 'MyController@myMethod',
   'as' => 'myroute'
));

---更新2 --- php artisan route:列出结果

+--------+----------+---------+------+---------+------------+
| Domain | Method   | URI     | Name | Action  | Middleware |
+--------+----------+---------+------+---------+------------+
|        | GET|HEAD | /       |      | Closure | web        |
|        | GET|HEAD | myroute |      | Closure | web        |
+--------+----------+---------+------+---------+------------+

3 个答案:

答案 0 :(得分:3)

您需要在Web服务器的配置文件中正确设置虚拟主机。设置public directory as root directory for Laravel VH and restart web server

  

对于Apache,您可以使用以下指令:

DocumentRoot "/path_to_aravel_project/public"
<Directory "/path_to_aravel_project/public">
     

对于nginx,您应该更改此行:

root /path_to_aravel_project/public;

答案 1 :(得分:2)

这就是我在项目中处理这个问题的方法。有两个步骤。

1.使用以下内容在/ public目录中创建一个新的.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 ^(.*)/$ /$1 [L,R=301]

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

<强> 2。项目根目录中有一个名为server.php的文件..(app的父,公共等)。

将其重命名为index.php

它应该有效..没有任何麻烦。

答案 2 :(得分:0)

是的,每个答案都很好用,但在此之前我发现apache重写模块 mod_rewrite 应该已经被激活了。

在ubuntu控制台上:a2enmod rewrite解决了我的情况。