Bonjour,

J'ai fais un .htaccess qui fonctionne pour les réécritures d'url mais quand je pointe sur l'url exacte d'un fichier js par exemple la redirection est quand même effectué alors que je ne le souhaite pas.

Voici mon .htaccess

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# -- Règles d'écriture --
#Page activation
RewriteRule ^([a-zA-Z]{0,2})/(activation)/([a-z0-9]{32})-(-0-9a-zA-Z.+_]+@-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,10})$ index.php?lang=$1&page=$2&token=$3&email=$4 [L]
#Demande d'une page avec la langue
RewriteRule ^([a-zA-Z]{0,2})/([a-zA-Z-_]+) index.php?lang=$1&page=$2 [L]
#Page index avec la langue
RewriteRule ^([a-zA-Z]{0,2})/ index.php?lang=$1 [L]
#ErrorDocument 404 /404.php
Options -Indexes
AuthName "Page d'administration"
AuthType Basic
AuthUserFile "/public_html/.htpasswd"
Require valid-user

Le problème étant que malgré les directives "RewriteCond %{REQUEST_FILENAME} !-d" et "RewriteCond %{REQUEST_FILENAME} !-f" quand je pointe sur l'url exacte d'un fichier la redirection vers index.php est tout de même effectués.

Est-ce que quelqu'un à une solution ? j'avais pensé à faire une règle de réécriture pour les dossiers /js /css etc... mais au final je trouve cette solution sale.

Merci d'avance pour vos réponses.

9 réponses


Xen0risDEV
Réponse acceptée

Bonjour, en gros créer une réécriture d'url en PHP.

À la racine de votre site créer un dossier public_html,
vous créer donc 1 .htaccess dans public_htlm, et un à la racine.

Celui de la racine :

RewriteEngine On
RewriteRule (.*) public_html/$1 [L]

celui de public_html :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L]

Déplacer maintenant tout votre site de la racine hors le .htaccess dans public_html.

Il vous reste ensuite à parser le $_SERVER'PATH_INFO'];

exemple d'index.php :

// var_dump($_SERVER'PATH_INFO']);
if(!isset($_SERVER'PATH_INFO'])){
    $pathbits= array('');
} else {
    $pathbits = explode("/", $_SERVER'PATH_INFO']);
}
if(!isset($pathbits[1]) || $pathbits[1] == ""){
    $page = "default"
} else {
    $page = basename($pathbits[1]);
}
$file = "pages/{$page}.php";
if(!is_file($file)){
    echo "Fichier non trouvé.";
} else {
    require($file);
}

Cordialement.

Bonjour, pour simplifier le tout essaye ceci :

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# -- Règles d'écriture --
#Page activation
RewriteRule ^([a-zA-Z]{0,2})/(activation)/([a-z0-9]{32})-(-0-9a-zA-Z.+_]+@-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,10})$ index.php?lang=$1&page=$2&token=$3&email=$4 [L]

#Demande d'une page avec la langue
RewriteRule ^([a-zA-Z]{0,2})/([a-zA-Z-_]+)$ index.php?lang=$1&page=$2 [L]

#Page index avec la langue
RewriteRule ^([a-zA-Z]{0,2})/ index.php?lang=$1 [L]

#ErrorDocument 404 /404.php

Options -Indexes

AuthName "Page d'administration"
AuthType Basic
AuthUserFile "/public_html/.htpasswd"
Require valid-user
Wapaca
Auteur

Salut,

Merci pour cette petit optimisation mais au final avec ou sans le $ le résultat sera identique donc autant ne pas le mettre pour ne pas donner du travail supplémentaire au serveur apache.

Sinon personne pour me guider ? est-ce propre de mettre des conditions pour ne pas réécrire les dossiers /js/ /css/ /ajax/ /images/ etc... ?
Après au niveau des adresses dans les attributs "src" tout est en absolu donc pas de problème à ce niveau.

Bonsoir, pour quoi ne te tente tu pas à éviter le .htaccess et créer un parser d'url.. ça serras plus simple pour vous ;)

Wapaca
Auteur

Bonsoir,

Ne pas utiliser le .htaccess mais un parser d'url ??? qu'est-ce qu'un parser d'url ? Il faut que je garde toutes les règles de réécriture concernant la langue pour le SEO.

Wapaca
Auteur

Je ne connaissais pas cette méthode pour réécrire les urls mais elle est super car j'ai du mal avec le .htaccess si je peux laisser le php traiter le tout tant mieux.

Je passe le sujet en résolu, merci :)

Bonjour, pas de soucis avec plaisir :)

Wapaca
Auteur

Technique testée et approuvée :)

Bonjour, merci pour votre réponse :)

Cordialement.