在 Ubuntu 中将 AllowOverride 更改为 All 后出现 500 内部服务器错误

Rak*_*esh 7 php apache ubuntu .htaccess

我的项目在 Blue 主机共享托管以及我的 XAMPP 本地主机中运行良好。

为了进行测试,我们将文件移动到本地 ubuntu 服务器。但 .htaccess 在此 ubuntu 服务器上不起作用。
这意味着可以使用 .php 扩展名访问文件,但在没有 .php 扩展名的情况下访问时会出现 404 错误。

http://172.31.0.55/project/contact.php可以运行,但是
http://172.31.0.55/project/contact显示 404 错误

这是我使用的 htaccess 代码。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /project/

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php[\s?] [NC]
RewriteRule ^ %1 [R=301,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/project/$1.php -f
RewriteRule ^(.+?)/?$ /project/$1.php [L]
Options All -Indexes
RewriteCond %{HTTP_REFERER} !^http://(www\.)?172.31.0.55/project/ [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?172.31.0.55/project/.*$ [NC]


ErrorDocument 403 http://172.31.0.55/project/403-error
ErrorDocument 404 http://172.31.0.55/project/404-error
Run Code Online (Sandbox Code Playgroud)


经过一番研究后我改变了线路/etc/apache2/apache2.conf

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride none
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

但现在尝试访问时显示 500 内部服务器错误http://172.31.0.55/project/

服务器版本是Apache/2.4.18 (Ubuntu) PHP 网站

我可以在http://172.31.0.55/ Apache默认页面看到以下代码

The configuration layout for an Apache2 web server installation on Ubuntu systems is as follows:

/etc/apache2/
|-- apache2.conf
|       `--  ports.conf
|-- mods-enabled
|       |-- *.load
|       `-- *.conf
|-- conf-enabled
|       `-- *.conf
|-- sites-enabled
|       `-- *.conf
Run Code Online (Sandbox Code Playgroud)

我尝试在 htaccess 中将 IP 地址更改为 localhost。但不工作

我检查了文件权限rwx rwx r-x

我做了这些更改参考https://askubuntu.com/questions/421233/enabling-htaccess-file-to-rewrite-path-not-working

Rak*_*esh 4

默认情况下,Apache 禁止使用 .htaccess 文件应用重写规则,因此首先您需要允许对该文件进行更改。使用 nano 或您喜欢的文本编辑器在此路径/etc/apache2/sites-available/000-default.conf中打开默认 Apache 配置文件

$ sudo nano /etc/apache2/sites-available/000-default.conf

在该文件中,您会发现一个<VirtualHost *:80>从第一行开始的块。在该块内部,添加以下新块,以便您的配置文件如下所示。确保所有块都正确缩进。

<VirtualHost *:80>
<Directory /var/www/html>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>

. . .
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

保存并关闭文件。要使这些更改生效,请重新启动 Apache。

$ sudo systemctl restart apache2
Run Code Online (Sandbox Code Playgroud)

我按照这些步骤操作,我的问题得到了解决。