htaccess ErrorDocument 规则不考虑以“.php”扩展名结尾的损坏 URL

问题描述 投票:0回答:1

我需要帮助来解决一些太简单或太复杂的问题,这会破坏我正在开发的网站。我会尽可能简洁地解释这个问题。

  1. 该网站使用一个简单的 php 调用函数(echo)将重复部分注入 HTML 代码中。除了 WordPress 上托管的博客部分之外,整个网站都是静态的。

  2. 现在,为了这个目的,服务器上的每个文件都这样命名 - mywebsite.com/file1.php

  3. 我已经在 htaccess 中实现了强制 www 的基本重写规则。 & https,一些 URL 更改的页面的 301 重定向,以及用于处理不存在的 URL 的自定义 404 页面。

问题
除了那些以 .php 结尾的链接之外,每个损坏的链接都会被重定向为缩进。
例如

  • https://www. mywebsite.com/broken.asp (按预期重定向)
  • https://www. mywebsite.com/broken.html (按预期重定向)
  • https://www. mywebsite.com/broken (按预期重定向)
  • https://www. mywebsite.com/broken.php (未找到文件)

除了不存在的以 .php 结尾的 URL 之外,每个损坏的 URL 和手动重定向都可以正常工作。它显示状态代码 404 和显示“未找到文件”的空白页。每个其他损坏的 URL 都会为重定向的 404 页面提供状态代码 302 和 200。现在,如果不是为了 SEO,这不会那么 困扰 ;这使得我为网站重新设计而删除的页面疯狂地弹出 404 错误(很多很多)。

我尝试过的修复
1.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ https://www.mywebsite.com/404.php [L,R=301]

这会为每个损坏的页面提供代码:302,但自定义重定向 301 停止工作,所有内容都会重定向到 404。

2.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*\.php)$ /index.php [L,R=404]

我尝试了这个,认为不存在的 .php url 将被重定向到主页,但它对自定义重定向 301 产生相同的效果

3.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} \.php$
RewriteRule ^(.*)$ /index.php

现在,这个对于不存在的 .php URL 和自定义 301 重定向来说就像一个魅力,但它为每个损坏的链接提供状态代码 200,我认为这对 SEO POV 非常不利。

我尝试了一切,但现在却束手无策。我什至联系了网站托管的服务器人员,却得到了答案“这超出了我们的范围,需要网页设计师的关注”

任何正确方向的帮助或指导将不胜感激。

.htaccess
1个回答
-2
投票

为了解决 .php URL 未正确处理自定义 404 重定向的问题,同时维护正确的 HTTP 状态代码,我们需要仔细平衡条件。这是为您的情况量身定制的干净的 .htaccess 设置:

# Enforce HTTPS and www
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.mywebsite.com%{REQUEST_URI} [L,R=301]

# Handle non-existing URLs including .php extensions
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*\.php$ /404.php [L,R=404]

# General rule for other non-existent URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /404.php [L,R=404]

# Custom 301 redirects for old pages
Redirect 301 /old-page /new-page
Redirect 301 /another-old-page /another-new-page
  • 使用浏览器开发者工具或Redirect Checker等工具进行验证 不同场景的HTTP状态码。测试损坏的 .php 和 非 .php URL 以确保正确的重定向。
© www.soinside.com 2019 - 2024. All rights reserved.