3

我需要重定向到index.php请求的任何目录。

所以我需要:

http://www.site.com/folder/files/hello.php

重定向到:

http://www.site.com/folder/files/index.php

对于任何子文件夹也一样:

http://www.site.com/folder/files/pages/other/hello.php

重定向到:

http://www.site.com/folder/files/pages/other/index.php
4

3 回答 3

7

(技术上)正确的方法

构造一个由当前scheme(//etc)、当前文件的主机名和路径组成的URI,httphttps发出一个Location头。

$url = sprintf('%s://%s%s/index.php',
    $_SERVER['SERVER_PORT'] == 80 ? 'http' : 'https',
    $_SERVER['SERVER_NAME'], rtrim(dirname($_SERVER['PHP_SELF']), '/'))
header("Location: $url");
exit;

这是因为位置标头 URI 应该是完整且绝对的。相对 URI 在技术上是不允许的,但是有一个草案规范来改变这一点。

务实之道

只需发出一个相对的Location标头,因为它很可能会起作用。

header('Location: index.php');
exit;
于 2013-10-18T02:56:42.947 回答
0

这可以在 .htaccess 本身中完成,因此不需要任何 PHP 代码。

启用mod_rewrite.htaccess通过httpd.conf然后将此代码放入您的 DOCUMENT_ROOT/.htaccess文件中:

RewriteEngine On
RewriteBase /

RewriteRule (.+?)/[^./]+\.php$ /$1/index.php [L,NC]
于 2013-10-18T07:45:23.980 回答
0

重定向folder/files/hello.phpfolder/files/index.php使用文件中的以下行folder/files/hello.php

<?php

$URL =  'http://'.$_SERVER['SERVER_NAME'].'/folder/files/index.php';

header("Location:  $URL ");

?>

使用类似的语法进行下一次重定向。

于 2018-12-06T09:33:42.997 回答