web-dev-qa-db-fra.com

Utiliser RewriteBase dans .htaccess pour créer de jolis liens

Je travaille actuellement sur un projet et j'essaie de rendre les liens jolis.

Nous avons des URL comme ceci: http://subdomain.domain.com/DynamicCountry/DynamicName/file.php

Ce que j'essaie de faire est de définir le RewriteBase sur /DynamicCountry/DynamicName. Est-ce possible d'utiliser les variables de Mod_Rewrite?

1
Timr

Pourvu que vous soyez satisfait de jolies URL qui ne se terminent pas par / mais ne comportent aucune extension de fichier, telle que .php, par exemple:
http://subdomain.domain.com/DynamicCountry/DynamicName/file
alors vous pourriez essayer cette solution.

  • Ajoutez ces lignes de code dans votre fichier http://subdomain.domain.com/.htaccess:

RewriteEngine on
RewriteRule ^(lib|theme|uploads|images|ajax) - [L]
RewriteCond $1 !^(index\.php|api|theme|images|robots\.txt|sitemap\.xml)
RewriteRule ^(.*)$ /index.php/$1 [L]

  • Et puis ceux-ci dans votre fichier http://subdomain.domain.com/index.php (en remplaçant la valeur de la variable $sPath par le chemin linux correct pour votre environnement d'hébergement):

<?php
$sPath='/var/www/subdomain.domain.com/';
$sAlias=isset($_SERVER["REQUEST_URI"])?substr($_SERVER["REQUEST_URI"],1):'';if(strpos($sAlias,'?')>0) $sAlias=substr($sAlias,0,strpos($sAlias,'?'));if(strpos($sAlias,'?')<1) $sAlias='default';
if(!file_exists($sPath.$sAlias.'php')) $sAlias='file-not-found';
require_once($sPath.$sAlias.'php');

  • Créez ensuite un sous-dossier pages dans le dossier racine Web du sous-domaine. Dans celui-ci, vous pourriez avoir des sous-dossiers DynamicCountry et DynamicName, puis file.php. Dans cet exemple, la jolie URL:
    http://subdomain.domain.com/DynamicCountry/DynamicName/file
    montrerait la page:
    /var/www/subdomain.domain.com/pages/DynamicCountry/DynamicName/file.php

  • En cas d'erreur HTTP 404, vous aurez besoin d'un fichier présent sur:
    /var/www/subdomain.domain.com/pages/file-not-found.php
    afin d’assurer une boucle infinie d’erreurs File Not Found ne se produit pas! Pour des raisons principalement de référencement, n'oubliez pas d'utiliser PHP code header('HTTP/1.0 404 Not Found'); avant la sortie de tout code HTML. Cela aide les moteurs de recherche à identifier les pages réelles des pages d'erreur.

Bien entendu, vous pouvez modifier cette solution selon vos besoins, mais nous espérons que cela vous donnera un bon concept de base de travail.

1
richhallstoke