我有这个网站 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
。
如果您需要更多信息,
请留下评论!
答案 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文档