PHP无法创建链接

时间:2014-10-29 02:44:19

标签: php hyperlink indexing connector building

我有这个网站 www.amse.com.br

出于某种原因,网站上的每个链接都不起作用,我知道问题出在哪里,但不知道原因。

index.php脚本处理虚假URL并从数据库中将信息带到网页:

<?php
require_once("api/connector.class.inc");

$url_cod = (isset($_REQUEST['cod'])) ? $_REQUEST['cod'] : '';
$url_nm_secao = explode('/', $url_cod);

$url_id = Connector::getAllName("tab_url", "id_tabela", "nm_url='" . $url_nm_secao[count($url_nm_secao)-1] . "'");
$url_tabela = Connector::getAllName("tab_url", "nm_tabela", "nm_url='" . $url_nm_secao[count($url_nm_secao)-1] . "'");


if($url_tabela == "tab_produto"){
  $_REQUEST["codigo"] = $url_id;
  include_once "detalhe-produto.php";
}else if($url_tabela == "tab_subcategoria"){
  $_REQUEST["subcategoria"] = $url_id;
  include_once "lista-produto.php";
}else if($url_tabela == "tab_categoria"){
  $_REQUEST["categoria"] = $url_id;
  include_once "lista-produto.php";
}else if($url_tabela == "tab_grupo"){
  $_REQUEST["grupo"] = $url_id;
  include_once "lista-produto.php";
}else if($url_tabela == "tab_conteudo"){
  $_REQUEST["codigo"] = $url_id;
  include_once "detalhe.php";
}else{

  if(isset($url_nm_secao[0]) && $url_nm_secao[0] == '' || $url_nm_secao[0] == 'index.php'){
    include_once "home.php";
  }elseif($url_nm_secao[0] != ''){
    $paginas = array('contato', 'carrinho', 'cadastro', 'pagamento', 'logout', 'salvar-pedido', 'endereco-de-entrega', 'retorno', 'obrigado', 'meus-pedidos', 'salvar-orcamento');

    if(isset($url_nm_secao[0]) && in_array($url_nm_secao[0], $paginas)){

      include_once $url_nm_secao[0].".php";

    }else if($url_nm_secao[0] == "finalizar-compra"){
      $_REQUEST["compra"] = 1;
      include_once "cadastro.php";
    }       
    else if($url_nm_secao[0] == "busca"){
      include_once "lista-produto.php";
    }
    else if($url_nm_secao[0] == "locacao"){
      include_once "lista-locacao.php";
    }       

}else{
  include_once "home.php";
}
  } ?>

例如,www.amse.com.br/contato应显示此页面www.amse.com.br/contato.php

这应该发生在网站上的每个链接上,但我得到404

如果您需要更多信息,

请留下评论!

2 个答案:

答案 0 :(得分:1)

您的网络服务器(Apache等)可能未配置为处理此类型的干净网址。

默认情况下,Web服务器将在其DocumentRoot下面查找名称匹配的文件,但是您的文件名为contato.php,而不是contato。这意味着Apache可能正在寻找名为contato但未找到它的文件,从而返回HTTP 404响应。

如果您使用的是Apache,那么这样的重写规则可能就是您所需要的

RewriteRule ^/([a-zA-Z0-9]+)([/a-zA-Z0-9]*)?$ /index.php?cod=$1$2&%{QUERY_STRING} [L]

这会占用网址中最初/之后的所有内容,并将其传递到cod变量中的程序,并在上面$_REQUESt['cod']中提供。有了这个,我想你的index.php将按预期工作。

答案 1 :(得分:0)

不确定这是否会有所帮助,但我为你清理了一些这就是我用开关说的话

switch($url_tabela){
    case "tab_produto":
        $_REQUEST["codigo"] = $url_id;
        include_once "detalhe-produto.php";
    break;
    case "tab_subcategoria":
        $_REQUEST["subcategoria"] = $url_id;
        include_once "lista-produto.php";
    break;
    case "tab_categoria":
        $_REQUEST["categoria"] = $url_id;
        include_once "lista-produto.php";
    break;
    case "tab_grupo":
        $_REQUEST["grupo"] = $url_id;
        include_once "lista-produto.php";
    break;
    case "tab_conteudo":
        $_REQUEST["codigo"] = $url_id;
        include_once "detalhe.php";
    break;
    default:
        if( !isset( $url_nm_secao[0] ) ){
            $url_nm_secao[0] = '';
        }

        switch ( $url_nm_secao[0] ){
            case "finalizar-compra":
                $_REQUEST["compra"] = 1;
                include_once "cadastro.php";
            break;
            case "busca":
                include_once "lista-produto.php";
            break;
            case "locacao":
                include_once "lista-locacao.php";
            break;
            default:
            case 'index.php':
                include_once "home.php";
            break;
        }
    break;
 }

正如你所看到的,它更容易阅读,我没有测试过这个,但它应该与你的相当接近。

Switch Case的Php文档

http://php.net/manual/en/control-structures.switch.php