如何在没有扩展名的情况下执行 php 重定向.php


How to execute php redirect without .php extension?

我正在尝试执行这样的重定向:

header("Location: application/controllers/backend");

但当然不起作用,因为页面上出现循环警告。相反,如果我执行:

header("Location: application/controllers/backend.php"); 

这有效,但我不想要.php扩展名。为什么?因为我在一条路由上工作,该路由允许我在服务器的当前 uri 的基础上加载正确的控制器。我怎样才能做到这一点?

这实际上是我的.htaccess:

RewriteEngine On
RewriteBase /AppFolderName/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]

如果您有有效的URL重写htAccess,则可以通过以下方式执行此操作:

header("Location: http://www.yourwebsite.com/application/controllers/backend");

和这个函数来获取你项目的完整URL:

function url(){
    if(isset($_SERVER['HTTPS'])){
        $protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http";
    }
    else{
        $protocol = 'http';
    }
    return $protocol . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
} 

因此,重定向代码应该是:

$base_url = url();
header("Location: ".$base_url."/application/controllers/backend");

试试这个

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !('.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

或这个)

Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^'.]+)$ $1.php [NC,L]