【问题标题】:htaccess don't redirect easy url and php pagehtaccess 不会重定向简单的 url 和 php 页面
【发布时间】:2014-08-04 20:33:13
【问题描述】:

首先,我很抱歉。我查了很多问题,但到目前为止没有任何效果。我不知道为什么。

我有一个网站 www.mysite.it

一个网址是

www.mysite.it/home.php?pagina=home

我想看看

www.mysite.it/homewww.mysite.it/home.php是一样的

我在 .htaccess 中添加了这个:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)/$ home.php?pagina=$1

我的 php 中有这个表达式:

<?php 
$get= @$_GET ['pagina'];
$pagina = (isset($_GET['pagina']) ? $_GET['pagina'] : 'home') . '.php';

    if(file_exists($get)){
        include($pagina);
    } else {
        include("404.php");
    }

 switch ($get){
            default :
            include ('contenuto/home.php');
            break;

            case "tournament":
            include ('torneo/torneo.php');
            break;

            case "arena":
            include ('contenuto/modalita/arena.php');
            break;

【问题讨论】:

  • 这怎么行不通?
  • 我觉得应该是switch($pagina)而不是switch ($get)

标签: php apache .htaccess mod-rewrite redirect


【解决方案1】:

您的 RewriteRule 仅匹配以“/”结尾的 URL。您需要更改重写规则。考虑使用 R 指令以及 L。

RewriteRule ^(.*)/$ home.php?pagina=$1 [L]
RewriteRule ^(.*)$ home.php?pagina=$1 [L]

然后改变你的逻辑。 404 if 块应该低于大小写。似乎您正在弄清楚要在多个地方访问哪个页面。我试图在下面解决这个问题。此外,使用调试语句来确定变量是否按照您想要的方式设置。还要记住,pagina 必须与磁盘上的实际文件匹配,包括目录。例如,如果您要求 torneo,它将找不到。锦标赛之所以有效,是因为它在 switch 块中有一个特殊的列表。

$get = @$_GET['pagina'];
if (!isset($_GET['pagina'])) {
    $get = 'home';
    $pagina = 'contenuto/home.php';
} else {
    $pagina = $get . '.php';
}

// debug
echo $get . '//' . $pagina

switch ($get) {
        default :
        $pagina = 'contenuto/home.php';
        break;

        case "tournament":
        $pagina = 'torneo/torneo.php';
        break;
}

if (file_exists($pagina)) {
    include($pagina);
} else {
    include("404.php");
}

【讨论】:

  • 不,如果我尝试在浏览器中写http://www.mysite.it/home/,他就把我赶出去了:Not Found The requested URL /home/ was not found on this server.
  • 不一定是决定性的 - 您有时会从脚本中返回 404。 http://www.mysite.it/home/ 和 file_exists($pagina) 会发生什么
  • 感谢回答,home.php,torneo.php,ecc 是我网站中页面的一部分,而不是页面本身,这就是为什么我包含所有这个块,这个 $pagina 是我的动态页面的正文
【解决方案2】:

在这里您检查一个文件是否存在并包含另一个文件:

if(file_exists($get)){
    include($pagina);

这行不通。必须是:

if(file_exists($pagina)){
    include($pagina);

【讨论】:

  • @scribo 加载没有结果是什么意思?
  • 如果我用你的代码更正了我的网站不会在我的浏览器上加载
  • 我没想到它会起作用。你的代码没有意义。我只是指出了其中一个问题。您需要做的是查看错误日志或设置 display_errors on。
  • 好吧不幸的是我只写了html和css部分,另一个人写了php部分但我没有联系了。
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
相关资源
最近更新 更多