Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PF2G

.htaccess PHP Clean URLs

Mensagens Recomendadas

PF2G

Boas,

Eu estou a tentar usar clean Urls para um backoffice. Resulta bem quando tenho o url até à página:

Mas quando acrescento a acção, a página perde os estilos (CSS).

Eu tenho uma função para "separar" o url:

<?php
function parse_path() {
$path = array();
if (isset($_SERVER['REQUEST_URI'])) {
$request_path = explode('?', $_SERVER['REQUEST_URI']);
$path['base'] = rtrim(dirname($_SERVER['SCRIPT_NAME']), '\/');
$path['call_utf8'] = substr(urldecode($request_path[0]), strlen($path['base']) + 1);
$path['call'] = utf8_decode($path['call_utf8']);
if ($path['call'] == basename($_SERVER['PHP_SELF'])) {
 $path['call'] = '';
}
$path['call_parts'] = explode('/', $path['call']);
$path['query_utf8'] = urldecode($request_path[1]);
$path['query'] = utf8_decode(urldecode($request_path[1]));
$vars = explode('&', $path['query']);
foreach ($vars as $var) {
 $t = explode('=', $var);
 $path['query_vars'][$t[0]] = $t[1];
}
}
return $path;
}
?>

E este é o meu .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ main.php [L]
</IfModule>

header.php

<?php
include('../functions/functionCleanUrl.php');

$cleanUrl=array();
$path_info = parse_path();
$cleanUrl=$path_info['call_parts'];

if(isset($cleanUrl[0])){ $page = $cleanUrl[0]; }
if(isset($cleanUrl[1])){ $action = $cleanUrl[1]; }
if(isset($cleanUrl[2])){ $id = $cleanUrl[2]; }
(...)

Aqui tenho o meu main.php onde vai buscar os ficheiros dependente da página seleccionada:

<?php
include('../includes/header.php');
?>
<div id="container">
<?php
$filename = $page.'.php';
if(file_exists($filename))
{
if($page!='')
 if((isset($action)) && ($action!=''))
 include('addItem.php');
 else
 include($page.'.php');
else
 include('dashboard.php');
}
else{
include('404.php');
}
?>
</div>
<?php
include('../includes/footer.php');
?>

Obrigado!

Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PF2G

Este é o meu header (desculpem o grande número de linhas):

<?php
   include('../functions/functionsBasic.php');
   include('../functions/functionCleanUrl.php');
   $path_info = parse_path();
   echo '<pre>'.print_r($path_info, true).'</pre>';
   $cleanUrl=array();
   $path_info = parse_path();
   $cleanUrl=$path_info['call_parts'];
   if(isset($cleanUrl[0])){ $page = $cleanUrl[0]; }
   if(isset($cleanUrl[1])){ $action = $cleanUrl[1]; }
   if(isset($cleanUrl[2])){ $id = $cleanUrl[2]; }
?>
<!DOCTYPE html>
<html lang="en">
   <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>RockerWeb - <?php echo firstUp($page); ?></title>

    <!-- Bootstrap Core CSS -->
    <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="../bower_components/bootstrap/dist/custom.css" rel="stylesheet">
    <link href="../bower_components/bootstrap/dist/custom.js" rel="stylesheet">

    <!-- MetisMenu CSS -->
    <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet">


    <!-- DASHBOARD: Timeline CSS -->
    <link href="../dist/css/timeline.css" rel="stylesheet">
    <!-- PROJECTS: DataTables CSS -->
    <link href="../bower_components/datatables-plugins/integration/bootstrap/3/dataTables.bootstrap.css" rel="stylesheet">
    <link href="../bower_components/datatables-responsive/css/dataTables.responsive.css" rel="stylesheet">
    <!-- PROJECTS: Editable Data Table -->

    <!-- FORMS: WYSIWYG Textarea -->

    <!-- FORMS: Form Validation -->
    <link rel="stylesheet" href="../vendor/bootstrap/css/bootstrap.css"/>
    <link rel="stylesheet" href="../dist/css/bootstrapValidator.css"/>
    <script type="text/javascript" src="../bower_components/forms/vendor/jquery/jquery.min.js"></script>
    <script type="text/javascript" src="../bower_components/forms/vendor/bootstrap/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="../bower_components/forms/dist/js/bootstrapValidator.js"></script>

    <!-- Custom CSS -->
    <link href="../dist/css/sb-admin-2.css" rel="stylesheet">
    <!-- Morris Charts CSS -->
    <link href="../bower_components/morrisjs/morris.css" rel="stylesheet">
    <!-- Custom Fonts -->
    <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
   </head>
   <body>
    <div id="wrapper">
	    <!-- Navigation -->
	    <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0">
		    <div class="navbar-header">
			    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
				    <span class="sr-only">Toggle navigation</span>
				    <span class="icon-bar"></span>
				    <span class="icon-bar"></span>
				    <span class="icon-bar"></span>
			    </button>
			    <a class="navbar-brand" href="dashboard">RockerWeb</a>
		    </div>
		    <!-- /.navbar-header -->
		    <ul class="nav navbar-top-links navbar-right">
			    <li class="dropdown">
				    <a class="dropdown-toggle" data-toggle="dropdown" href="#">
					    <i class="fa fa-envelope fa-fw"></i>  <i class="fa fa-caret-down"></i>
				    </a>
				    <ul class="dropdown-menu dropdown-messages">
					    <li>
						    <a href="#">
							    <div>
								    <strong>email@email.com</strong>
								    <span class="pull-right text-muted">
									    <em>data</em>
								    </span>
							    </div>
							    <div>texto...</div>
						    </a>
					    </li>
				    </ul>
			    </li>
			    <li class="dropdown">
				    <a class="dropdown-toggle" data-toggle="dropdown" href="#">
					    <i class="fa fa-bell fa-fw"></i>  <i class="fa fa-caret-down"></i>
				    </a>
				    <ul class="dropdown-menu dropdown-alerts">
					    <li>
						    <a href="#">
							    <div>
								    <i class="fa fa-comment fa-fw"></i> notficação
								    <span class="pull-right text-muted small">data ago</span>
							    </div>
						    </a>
					    </li>
					    <li class="divider"></li>
					    <li>
						    <a class="text-center" href="#">
							    <strong>See All Alerts</strong>
							    <i class="fa fa-angle-right"></i>
						    </a>
					    </li>
				    </ul>
			    </li>
			    <li class="dropdown">
				    <a class="dropdown-toggle" data-toggle="dropdown" href="#">
					    <i class="fa fa-user fa-fw"></i>  <i class="fa fa-caret-down"></i>
				    </a>
				    <ul class="dropdown-menu dropdown-user">
					    <li><a href="#"><i class="fa fa-user fa-fw"></i> User Profile</a>
					    </li>
					    <li><a href="#"><i class="fa fa-gear fa-fw"></i> Settings</a>
					    </li>
					    <li class="divider"></li>
					    <li><a href="#"><i class="fa fa-sign-out fa-fw"></i> Logout</a>
					    </li>
				    </ul>
			    </li>
		    </ul>
		    <div class="navbar-default sidebar" role="navigation">
			    <div class="sidebar-nav navbar-collapse">
				    <?php
					    require('../config/db-connect/config.php');
					    $selectPages=$dbConnect->query("SELECT * FROM pagesbackend");
				    ?>
				    <ul class="nav" id="side-menu">
					    <?php
						    $navMenu = "";

						    while($rowPages=$selectPages->fetch_assoc())
						    {
							    $rowPage=$rowPages['pageNome'];
							    if($rowPage==strtolower($page))
								    $href='#';
							    else
								    $href=strtolower($rowPages['pageNome']);
							    $navMenu .= '<li>';
								    $navMenu .= '<a href="'.$href.'">'.$rowPage.'</a>';
							    $navMenu .= '</li>';
						    }
						    echo $navMenu;
					    ?>
				    </ul>
				    <?php
					    mysqli_close($dbConnect);
				    ?>
			    </div>
		    </div>
	    </nav>
	    <div id="page-wrapper">
		    <div class="row">
			    <div class="col-lg-12">
				    <h1 class="page-header"><?php echo strtoupper($page) ?></h1>
			    </div>
		    </div>

Se eu puser o

echo '<link href="../path/to/css" rel="stylesheet">';

Tenho que tirar o link do header, certo?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.