Problema com URL Amigavel
.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
Classe:
<?php
class Url
{
private static $url = null;
private static $baseUrl = null;
public static function getBase()
{
if( self::$baseUrl != null )
return self::$baseUrl;
global $_SERVER;
$startUrl = strlen( $_SERVER["DOCUMENT_ROOT"] );
$excludeUrl = substr( $_SERVER["SCRIPT_FILENAME"], $startUrl, -9 );
if( $excludeUrl[0] == "/" )
self::$baseUrl = $excludeUrl;
else
self::$baseUrl = "/" . $excludeUrl;
return self::$baseUrl;
}
public static function getURL( $id )
{
// Verifica se a lista de URL já foi preenchida
if( self::$url == null )
self::getURLList();
// Valida se existe o ID informado e retorna.
if( isset( self::$url[ $id ] ) )
return self::$url[ $id ];
// Caso não exista o ID, retorna nulo
return null;
}
private static function getURLList()
{
global $_SERVER;
// Primeiro traz todos as pastas abaixo do index.php
$startUrl = strlen( $_SERVER["DOCUMENT_ROOT"] ) -1;
$excludeUrl = substr( $_SERVER["SCRIPT_FILENAME"], $startUrl, -10 );
// a variável$request possui toda a string da URL após o domínio.
$request = $_SERVER['REQUEST_URI'];
// Agora retira toda as pastas abaixo da pasta raiz
$request = substr( $request, strlen( $excludeUrl ) );
// Explode a URL para pegar retirar tudo após o ?
$urlTmp = explode("?", $request);
$request = $urlTmp[ 0 ];
// Explo a URL para pegar cada uma das partes da URL
$urlExplodida = explode("/", $request);
$retorna = array();
for($a = 0; $a <= count($urlExplodida); $a ++)
{
if(isset($urlExplodida[$a]) AND $urlExplodida[$a] != "")
{
array_push($retorna, $urlExplodida[$a]);
}
}
self::$url = $retorna;
}
}
?>index.php
<?php
require_once('class/URL.class.php');
$modulo = Url::getURL( 0 );
if( $modulo == null )
$modulo = "principal";
if( file_exists( $modulo . ".php" ) )
require $modulo . ".php";
else
require "index.php";
?>
<a href="<?php echo URL::getBase(); ?>index">index</a>
<a href="<?php echo URL::getBase(); ?>portifolio">portifolio</a>
ele me retorna o seguinte:
http://localhost/pasta/portiindex
http://localhost/pasta/portiportifolio
Discussão (5)
Carregando comentários...