如何将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 |
+--------+----------+---------+------+---------+------------+
答案 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
解决了我的情况。