【问题标题】:500 Internal Server Error after changing AllowOverride to All in Ubuntu在 Ubuntu 中将 AllowOverride 更改为 All 后出现 500 内部服务器错误
【发布时间】:2017-11-10 08:11:32
【问题描述】:

我的项目在 Blue 主机共享主机以及我的 XAMPP localhost 中运行良好。

为了测试,我们将文件移动到本地 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


经过一番研究,我在/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>

但现在尝试访问 http://172.31.0.55/project/ 时显示 500 Internal server error

服务器版本为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

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

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

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

【问题讨论】:

  • 检查是否使用 apachectl -l 加载了 rewrite_module
  • Options All -Indexes 的位置看起来很奇怪。一般来说,如果您有AllowOverride none,则意味着.htaccess 无法正常工作,并且当您启用它时出现500 错误意味着.htaccess 文件中可能存在错误。查看 apache 错误日志了解更多信息

标签: php apache .htaccess ubuntu


【解决方案1】:

也是第一个

我遇到了同样的问题。经过大量搜索后,我发现@Doug Smythies 的方式非常适合我。赞成票。

所以我去终端并运行以下代码:

sudo a2enmod 重写
sudo 服务 apache2 重启 就是这样。希望这对其他人有帮助。

选项索引 FollowSymLinks 允许覆盖所有 命令允许,拒绝 允许所有人 要求所有授予

从您的目录名称中删除项目 1,然后解决问题。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    $ sudo systemctl restart apache2
    

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

    【讨论】:

    • 我收到错误 404 并进行了较高的设置,会出现什么问题?
    • @Duna 这意味着 mod_rewrite 不起作用,因为用户友好的 url 没有指向实际文件。这是由于:未启用mod_rewrite或未处理您的htaccess文件。
    • 编辑默认配置对其他虚拟主机有什么影响?
    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多