Buenas, desde hace unos días le estoy dando vueltas a un script de redirecciones que estoy intentando hacer.
Trata de crear friendly urls, es decir, de las bonitas para los buscadores.
Consta de dos partes, una en .htaccess que está funcionando, y la redirección para cuando la url no está bien escrita.
El problema lo tengo en esta última y es cosa del php, he intentado varias cosas pero sin resultado, y lo último que estoy intentando es que mire si hay caracteres que quiero sustituir, sustituirlos y hacer la redirección si los hay, y sino pues no redireccionar.
El código es el siguiente:
Código PHP:
function esta_limpio( $haystack, $needle ) {
$count = 0;
foreach ($needle as $substring) {
$count += substr_count( $haystack, $substring);
}
return $count;
}
function sentence_cap($impexp, $sentence_split) {
$textbad=explode($impexp, $sentence_split);
$newtext = array();
foreach ($textbad as $sentence) {
$sentencegood=ucfirst($sentence);
$newtext[] = $sentencegood;
}
$textgood = implode($impexp, $newtext);
return $textgood;
}
function redireccionar_limpio($page){
$capitalizada = sentence_cap("t/",$page);
$capitalizada = sentence_cap(":",$capitalizada);
$capitalizada = sentence_cap("/",$capitalizada);
$limpio = array(
"%E1" => "a",
"%C1" => "A",
"%E9" => "e",
"%C9" => "E",
"%ED" => "i",
"%CD" => "I",
"%F3" => "o",
"%D3" => "O",
"%FA" => "u",
"%DA" => "U",
"%C3%B1" => "n",
"%F1" => "n",
"%D1" => "N",
"/" => "-",
"%20" => "_",
" " => "_"
);
$sinespecialchars = strtr($capitalizada, $limpio);
$limpiar = array("%E1","%C1","%E9","%C9","%ED","%CD","%F3","%D3","%FA","%DA","%C3%B1","%F1","%D1","%20"," ","/");
$repetir = esta_limpio($page, $limpiar);
if($repetir > '0'){
$destino = "Location: ".$sinespecialchars;
header($destino);
}
}
redireccionar_limpio($_GET['q']);
El
sería en este caso la parte variable de la url, es decir, todo lo que va detras de
www.midominio.com/variable/de/la/url la cual quiero formatear de la siguiente forma:
Que capitalize la primera letra, y si hay : a mitad tambien, es decir
www.midominio.com/Variable:Deurl
Que si hay símbolos que no sean [a-Z], :, =, ? o &, los reemplace por sus homónimos (si son acentos, por el carácter sin el acento y si son otros por _)
El problema es que no he conseguido hacer que compruebe que son letras normales ya que en las url los carácteres se interpretan como %20 por ejemplo para el espacio.
Si alguien tiene una idea de como podría hacer que sea tan benévolo de decírmelo ya que lo único que consigo de momento es bucles infinitos.
Por cierto, mi htaccess es el siguiente:
Código:
RewriteEngine On
RewriteBase /script/pruebas
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?q=$1 [L,QSA]
Gracias por adelantado