示例:
Route::get('/get', function() {
return 'get';
});
要查看上面的路线,我必须导航到public / index.php / get。
我查看了很多SO帖子,并搜索了不同的东西,并没有发挥作用(是的,我每次都重启apache)。
这是公共目录中的.htaccess:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
</IfModule>
# For all files not found in the file system, reroute the request to the
# "index.php" front controller, keeping the query string intact
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
还有什么可能导致这种情况?我正在运行Ubuntu。
答案 0 :(得分:59)
此行为的两个最常见原因是:
未启用mod_rewrite
sudo a2enmod rewrite && sudo service apache2 restart
AllowOverride
设置为None,将其设置为All,假设为Apache2.4
sudo nano /etc/apache2/apache2.conf
搜索<Directory /var/www/>
并将AllowOverride None
更改为AllowOverride All
,然后保存文件并重新启动apache
答案 1 :(得分:20)
你是否在apache上安装并启用了mod_rewrite?尝试删除if行(和),并在尝试加载网站时查看是否抛出错误。如果是,请运行sudo a2enmod rewrite
并重新启动apache。
这是我公共/目录中的.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>
答案 2 :(得分:2)
将AllowOverride None
更改为AllowOverride All
和sudo a2enmod rewrite && sudo /etc/init.d/apache2 reload
确实有所帮助。
答案 3 :(得分:1)
在 Apache配置文件中,该文件可能位于 /etc/httpd/conf/httpd.conf (位置和名称在服务器上有所不同),请提供对的AllowOverride权限。 htaccess文件,通过更新目录如下:
<Directory "/var/www/laravel-sample-project/public">
AllowOverride All
</Directory>
这可能会解决您在laravel路线上的问题。
还要确保您要提供的访问权限“ AllowOverride All”仅限于上述目录,并且仅限于目录 / var / www / laravel-sample-project / public (此处提到)是我的项目的根目录,该目录可能因您而异)
答案 4 :(得分:0)
如果您不使用.htaccess文件,则需要指定重定向的目录:
<IfModule mod_rewrite.c>
RewriteEngine On
<Directory /home/vitela/laravel/public>
RewriteBase /public
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L,QSA]
</Directory>
</IfModule>
答案 5 :(得分:0)
在MacOs中。 .htaccess无法正常工作的主要问题是在apache配置的httpd.conf文件中没有启用mod_rewrite.so。 我通过取消注释该行来解决这个问题:
从上面的httpdf.conf行中删除#。然后它会工作。享受!