У меня есть этот сайт 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
,
Если вам нужна дополнительная информация,
пожалуйста, оставьте в комментариях!
Ваш веб-сервер (Apache и т. Д.) Может быть не настроен для обработки этого типа чистого URL.
По умолчанию веб-сервер будет искать файл с соответствующим именем под 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]
Это займет все после первоначального /
в URL и передайте его вашей программе в cod
переменная, делая его доступным в $_REQUESt['cod']
выше. С этим я предполагаю, что ваш index.php будет работать так, как ожидалось.
Не уверен, что это поможет, но я кое-что почистил для вас, это было то, что я говорил с помощью переключателя
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;
}
Как вы можете видеть, это намного легче читать, я не проверял это, но оно должно быть достаточно близко к тому, что у вас есть.
Php документация для Switch Case