除了基本URL和/site/public/
文件夹中的文件之外,我无法设法使Laravel路由正常工作。
http://testurl/
(通过apache虚拟主机设置)起作用,并加载主页。
http://testurl/blog
)不起作用(返回404),但我希望这样做。
奇怪的是,http://testurl/index.php/blog
确实有效。
我已经在100个不同的地方使用Google搜索,研究了无数的StackOverflow问题,并尝试了所有我能找到的东西,但没有任何效果。
我该如何解决?
我在Apache 2.4.29上运行Laravel 5.7,在MacOSX 10.13.4上运行PHP 7.1.9。
我已经在httpd.conf
中启用了重写模块,如下所示:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
...
<Directory />
AllowOverride all
Require all denied
</Directory>
我的httpd-vhosts.conf
的设置如下:
<VirtualHost *:80>
DocumentRoot "/Library/WebServer/Documents/site/public"
ServerName testurl
<Directory /Library/WebServer/Documents/site/public>
Order Allow,Deny
Allow from all
</Directory>
</VirtualHost>
.htaccess
文件夹中的/site/public/
看起来像这样(我不想更改它):
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
我的config/app.php
行如下:
'url' => env('APP_URL', 'http://testurl'),
最后但并非最不重要的一点,web.php
看起来像这样:
<?php
Route::get('/', function () {
return view('home');
});
Route::get('blog', function () {
return view('blog');
});
如果我想念其他东西(或可以尝试的其他东西),请告诉我。
最好,我希望解决方案在部署到服务器时不需要我更改Laravel代码。
感谢您的帮助!
答案 0 :(得分:1)
经过大量搜索,我发现了this question,它帮助我找到了答案。
我需要做的就是像这样将AllowOverride All
添加到我的httpd-vhosts.conf
文件中:
<VirtualHost *:80>
DocumentRoot "/Library/WebServer/Documents/site/public"
ServerName testurl
<Directory /Library/WebServer/Documents/site/public>
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
</VirtualHost>
这已解决了该问题,现在一切正常加载。