【问题标题】:Error while removing .html from URL using .htaccess?使用 .htaccess 从 URL 中删除 .html 时出错?
【发布时间】:2021-05-11 03:27:05
【问题描述】:

我需要从我网站上的所有网址中删除 .html。诀窍是 - 所有页面和子页面都可以,除了一个。一页只是向我显示“发现错误 404 mot”现在我试图了解如果在所有页面都正常工作之前并立即为所有页面执行删除 .html 之前,这怎么可能。实际上尝试了不同的组合 - 最终都得到了相同的结果。我认为这可能是页面的问题,但是什么样的问题以及我在哪里寻找它?将不胜感激。

正在使用以下代码:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME}/ -d
RewriteCond %{SCRIPT_FILENAME}.html !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.html$ /$1 [R=301,L]
RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L] 

【问题讨论】:

  • 您正在查看缓存的结果吗?始终使用新的匿名浏览器窗口进行测试并使用“深度重新加载”,而不仅仅是重新加载。如果这不是问题,那么您将需要开始调试。 apache http 服务器的重写模块允许记录重写引擎内部发生的事情。我建议您首先阅读您正在使用的工具的文档:cwiki.apache.org/confluence/display/HTTPD/RewriteLog
  • 我是这么想的,所以我立即尝试了匿名浏览器,但没有帮助。我认为这可能是页面本身的问题
  • 如果这些真的是“只是”普通的 html 文件,那么这些文件没有任何问题会导致 404。该错误表明请求的资源不存在(您可能读)。所以要么文件不存在(你肯定三重检查,不包括拼写),或者 http 服务器内部的路由是错误的(考虑到你只实现了一般的重写规则,这是令人惊讶的)。所以你需要开始调试,我们不能为你做...

标签: html apache .htaccess url


【解决方案1】:

尝试以下规则:

RewriteEngine On    
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.html[\s?/] [NC]
RewriteRule ^ /%1%2 [R=302,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

详情在我之前的回答https://stackoverflow.com/a/46457844/5255593

如果没问题,把R=302换成R=301就永久了

【讨论】:

  • 同样的事情。除了一个之外,所有页面都在工作。还有什么有趣的 - 如果我手动输入子页面的地址(这个页面有 6 个子页面),我可以进入子页面。但是这个页面不起作用。表示重定向过多。
猜你喜欢
  • 1970-01-01
  • 2012-05-28
  • 2012-05-27
  • 2017-08-11
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
相关资源
最近更新 更多