我有一个 Ubuntu 14.04 内核。我正在这个服务器上安装我的 Laravel 应用程序。 安装后,我尝试将根目录设置为public。
sudo nano /etc/apache2/sites-available/000-default.conf
我在文件中只有这些选项
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port t$
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/public/
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
我已将文档根目录更改为
DocumentRoot /var/www/html/public/
现在,当我尝试访问我的 Laravel 应用程序时,通过
123.xxx.xxx.xxx/
它显示主页并且运行良好。它也获取所有 GET 变量。例如:123.xxx.xxx.xxx?type=wefwef
但是当我转到其他链接时,例如
123.xxx.xxx.xxx/login
,它给了我一个错误
Not Found
The requested URL /login/ was not found on this server.
Apache/2.4.7 (Ubuntu) Server at 104.236.234.85 Port 80
我的 routes.php 在本地主机上运行良好。但不是在这个服务器上。请帮我。
这看起来你必须通过将它添加到你的虚拟主机来启用
.htaccess
:
<Directory /var/www/html/public/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
如果这不起作用,请确保您启用了mod_rewrite。
修改后不要忘记重启apache! (
service apache2 restart
)
我通过执行以下操作解决了问题: 检查你的 apache 中是否有一个名为 rewrite.load 的模块:
cd /etc/apache2/mods-enabled/
如果不存在执行以下摘录:
sudo a2enmod rewrite
否则,更改 Apache 配置文件以统一使用“友好 URL”。
sudo nano /etc/apache2/apache2.conf
在编辑器中找到如下代码:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
更改为:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
之后通过以下方式重新启动 Apache 服务器:
sudo /etc/init.d/apache2 restart
或者,您可以替换 .htaccess 文件中的所有内容
Options +FollowSymLinks -Indexes
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
在这里查看文档。 https://laravel.com/docs/5.8/installation#web-server-configuration
对于 ubunutu 18.04 在一个流浪者盒子里......这就是帮助我
确保 www-data 对 .htaccess 文件有权限
sudo chown www-data.www-data .htaccess
编辑 apache2 conf 以允许符号链接等
sudo nano /etc/apache2/apache2.conf
将此添加到文件
<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
重启你的apache2服务器
sudo service apache2 restart
我希望这对某人有帮助。
如果您仍然遇到问题的一些变化,除了所有答案之外,编辑
.env
文件并将APP_URL
设置为您的域名,如下所示:
APP_URL=similar_to_my_avatar_link
在 httpd.conf 文件中你需要删除#
#LoadModule rewrite_module modules/mod_rewrite.so
删除#行后将如下所示:
LoadModule rewrite_module modules/mod_rewrite.so
Apache 重启
太晚了..但为了利益 你可以编辑你的 .htaccess 文件 评论这一行
# RewriteRule ^ index.php [L]
确保您启用了mod_rewrite。
restart apache
并清除浏览器的cookies,以便在.htaccess
再次阅读我在我的本地机器(Windows 11)上遇到了类似的问题,几个小时后,我发现大多数应用程序现在重定向到 HTTPS,并且 XAMPP 在创建类似于非 ssl 的安全虚拟主机后对安全虚拟主机有不同的配置,我解决了这个问题。
我在
cPanel
中遇到了同样的问题,我解决了我的问题以在这些行下面的.htaccess
文件中添加
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
将以下内容添加到公用文件夹中的 .htaccess。
<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>
在 httpd.conf 中当前版本的 Apache 中有几行:
DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
...
</Directory>
而不是前面提到的:
DocumentRoot /var/www/
<Directory /var/www/
...
</Directory>
这取决于你的服务器的目录结构,但默认情况下我猜它可能是这样的。
按照建议,在 Directory 标签内,我更改了如下选项:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
默认情况下是
AllowOverride none
。它有帮助。
当然,同一个文件中的
LoadModule rewrite_module modules/mod_rewrite.so
应该打开。
对于 ubuntu!
你需要编辑这个文件:
nano /etc/apache2/conf-available/apache2.conf
改变这个:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
至:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
然后只是:
sudo systemctl reload apache2