我正在使用laravel 4.
我有一个视图nest.blade.php
和相应的控制器NestController.php:
控制器内容:
class NestController extends BaseController {
public function showView()
{
return View::make('nest');
}
}
路线:
Route::get('/nest', 'NestController@showView');
当我去url / nest时它不起作用。 当我去url / index.php / nest时,它确实有效。
显然我只是希望它没有index.php而/ nest。
我该如何解决这个问题?
我的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>
答案 0 :(得分:8)
该框架附带了一个用于允许的public / .htaccess文件 没有index.php的网址。如果您使用Apache来为Laravel提供服务 应用程序,请务必启用mod_rewrite模块。
如果Laravel附带的.htaccess
文件无法与您的文件一起使用
Apache安装,试试这个:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
要获得更多相关帮助,请查看this answer。
答案 1 :(得分:3)
我在Apache HTTP服务器中启用了mod_rewrite模块,重新启动了Apache服务并再次进行了测试并且工作正常!
以下是我用来启用mode_rewrite;
的代码1)在Apache / conf / httpd.conf
中取消这一行LoadModule rewrite_module modules / mod_rewrite.so
2)为&#34; sample-project&#34;创建一个新配置。无需修改httpd.conf文件中的默认配置
Directory "C:/Apache24/htdocs/sample-project"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all Directory>
答案 2 :(得分:2)
警惕!如果启用重写模块后仍无法正常工作。您需要更改行&#34; AllowOverride None&#34; to&#34; AllowOverride All&#34;在httpd.conf中。
由于@The Alpha警告,Laravel不需要为此目的进行配置。
答案 3 :(得分:1)
当您在AllowOverride None
中将行AllowOverride All
更改为httpd.conf
时,请确保在包含有效路径的<directory ...>
内进行此操作。
实施例
<Directory "/var/www/html"> #check path
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
答案 4 :(得分:0)
在您的.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]
答案 5 :(得分:0)
由于某些原因,以上答案对我不起作用,因此这是唯一对我有用的答案。
我正在使用 ubuntu 18.04 amd64
作为开发服务器环境。
因此,我修改了 apache.conf
位于 /etc/apache2
发件人:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted
收件人:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted
而且来自:
<Directory /usr/share> AllowOverride None Require all granted
收件人
<Directory /usr/share> AllowOverride All Require all granted
之后,您需要在终端中使用apache
命令重新启动sudo service apapche2 restart
现在,无需使用URL中的index.php即可访问页面
贷方转到: joshymatheww @ @ Laracasts servers discussion channel on Aug 5, 2017
答案 6 :(得分:0)
登录到终端
sudo nano /etc/apache2/apache2.conf
行后
<Directory /var/www/>
.
.
.
</Directory>
并粘贴以下代码
<Directory /var/www/html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
现在按Ctrl + O,然后按Ctrl + M,再按Ctrl + x
现在重新启动apache服务器
sudo service apache2 restart
答案 7 :(得分:0)
尝试以下.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]
</IfModule>