如何将非 php 扩展名 url 重定向到 php 扩展名 url htaccess?

how to redirect non php extension url to php extension url htaccess?

我已经通过 functions.php.

为我在 wordpress 中的所有页面添加了 .php 扩展名

我的代码-

<?php
// Do NOT include the opening PHP tag

// Add .PHP to page permalinks
add_action('init', 'ss_php_pages', -1);
function ss_php_pages() {
    global $wp_rewrite;
    
    if ( !strpos($wp_rewrite->get_page_permastruct(), '.php')){
            $wp_rewrite->page_structure = $wp_rewrite->page_structure . '.php';
    }
    
    $wp_rewrite->flush_rules();
}

// Remove slash from page permalinks
add_filter('user_trailingslashit', 'no_page_slash_on_ss',66,2);
function no_page_slash_on_ss($string, $type){
    global $wp_rewrite;
    
    if ($wp_rewrite->using_permalinks() && $wp_rewrite->use_trailing_slashes==true && $type == 'page'){
        return untrailingslashit($string);
    }else{
       return $string;
      }
}

现在我想将旧的 link (example.com/demo) 重定向到新的 link (example .com/demo.php).. 我那里有很多页面,所以我无法手动为每个页面添加重定向。

附加信息: 我在我的 Wordpress 页面中添加了 .php 扩展名(示例。com/demo + .php)。现在,没有 .php 的旧链接(example.demo 或示例。com/anything)得到 404,因为我向它们添加了 .php,因此它们已经修改。现在我想将我所有旧的 link 重定向到 example.com/demo 到 example.com/demo.php 或 example.com/xyz 到 example.com/xyz.php 以免丢失流量或损坏 link.

您可以使用 WordPress htaccess 中的 RewriteRule 指令将 non-php 页面重定向到 php

在您的 htaccess 文件的顶部,放置以下规则:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ /.php [L,R=301] 

能否请您尝试遵循 htaccess 规则。确保 htaccess 存在于根文件夹中。

确保在测试 URL 之前清除浏览器缓存。

RewriteEngine on
##User is using wordpress without this rule it was adding .php to home page too which was NOT needed, hence this rule is been added.
RewriteRule ^/?$ / [R=301,END]

##Major rules for links which are non php and should be served with php format files.
RewriteCond %{DOCUMENT_ROOT}/.php -f [NC]
RewriteCond %{REQUEST_URI} !\.php/?$ [NC]
RewriteRule ^(.*)/?$ .php [L,R=301]

对于JS/CSS重写:您可能需要使用base标签来固定您的js和其他相关资源。如果您使用相对路径链接 js 文件,那么该文件显然会得到 404,因为它正在寻找 URL 路径。例如,如果 URL 路径是 /file/ 而不是 file.html 那么您的相关资源将从 /file/ 加载,这不是目录而是重写的 html 文件。要解决此问题,请使您的链接成为绝对链接或使用 base 标记。在您网页的 header 中添加此 <base href="/"> 以便您的相关链接可以从正确的位置加载。