RewriteRule htaccess à toujours retirer la barre oblique même répertoire
L'objectif est de combiner plusieurs règles:
- jamais avoir une barre oblique dans l'URI
- interne de la réécriture de l'index.php (domain.tld/somedir/index.php) lors de l'appel de domaine.tld/somedir
- supprimer les extensions de fichiers, vérifier si + '.php' existe et, éventuellement, à l'interne de réécriture à
Ce qui va être fait dans '.htaccess", car cela est mon seul accessible .
Une tentative de ma part jusqu'à présent
# check if *.php exists
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*[^/])/?$ $1.php [L, QSA]
# do not allow trailing slash
RewriteRule (.*)/ $1 [L, R=301]
La difficulté ici est que la requête de domaine.tld/somedir' appelle normalement le répertoire de l'index.php après avoir été redirigé vers le domaine.tld/somedir/'. Cependant, je voudrais que le index.php pour être appelé en interne (pas de 301) directement lors de l'interrogation de domaine.tld/somedir'.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser ce code:
DirectorySlash off
est réglé. il renvoie une erreur 403!RewriteRule ^mydir/.*$ mydir [L]
mais cela provoque duplicite de contenu sur /mydir et /mydir/Il y a un réglage séparé de apache appelé
DirectorySlash
qui peut être activé/désactivé. Vous pouvez en lire plus à httpd.apache.org/docs/2.2/mod/mod_dir.html#directoryslash mais assurez-vous de lire la partie sur les raisons de ce qui est fait ci-dessous à droite où il est dit "de bonnes raisons". Notez également la question de la sécurité.DirectoryIndex will be evaluated only for directories requested with trailing slash.
ce qui Signifie que l'index de la page ne se charge pas, sauf si vous avez une barre oblique. Aussi, les liens relatifs en html sera brisé parce que le html ne verrez pas la page actuelle comme un répertoire, mais au lieu d'un fichier.mod_autoindex
et les répertoires ne seront pas listés. Si il n'y a pas de gestionnaire spécifique pour un chemin sans une page d'index, puis une 404 sera émis. La question de la sécurité est que la page d'index ne sera pas appelé sans slash etmod_autoindex
le coup, si disponible.