首页 > 解决方案 > 将 .html 添加到 url 但未找到结果 404

问题描述

阅读this和bababa,但遗憾的是他们都不能指导我如何调试。

我正在尝试将以下 url https://example.com/hello重定向 到 https://example.com/hello.html

这是我的做法

第一的

vim /etc/apache2/apache2.conf,设置AllowOverride All<Directory /var/www/>

现在是

<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

第二

sudo service apache2 restart

第三

.htaccess在代码中public_html和代码下创建

<IfModule mod_rewrite.c>
  
Options FollowSymLinks

RewriteEngine On
RewriteCond %{REQUEST_URI} !^.*\.html$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ %{REQUEST_FILENAME}.html

</IfModule>

但仍然返回 404 not found ,如下所示。

在此处输入图像描述

任何建议或我缺少配置 apache 的任何部分?谢谢


- - - 回答 - - -

错过了 的配置mod_rewrite。可以看看这个帖子

标签: apache.htaccess

解决方案


.html在其末尾添加%{REQUEST_FILENAME}将导致 404,因为它%{REQUEST_FILENAME}代表完整的文件系统路径而不是 URI 路径。

你应该使用这个规则:

RewriteEngine On

RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . %{REQUEST_URI}.html [L]

甚至更好:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+?)/?$ $1.html [L]

推荐阅读