我需要帮助来解决一些太简单或太复杂的问题,这会破坏我正在开发的网站。我会尽可能简洁地解释这个问题。
该网站使用一个简单的 php 调用函数(echo)将重复部分注入 HTML 代码中。除了 WordPress 上托管的博客部分之外,整个网站都是静态的。
现在,为了这个目的,服务器上的每个文件都这样命名 - mywebsite.com/file1.php
我已经在 htaccess 中实现了强制 www 的基本重写规则。 & https,一些 URL 更改的页面的 301 重定向,以及用于处理不存在的 URL 的自定义 404 页面。
问题
除了那些以 .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 非常不利。
我尝试了一切,但现在却束手无策。我什至联系了网站托管的服务器人员,却得到了答案“这超出了我们的范围,需要网页设计师的关注”。
任何正确方向的帮助或指导将不胜感激。
为了解决 .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