J'ai 8 lignes de règles de réécriture dans mon fichier .htaccess. J'ai besoin d'exclure deux répertoires physiques sur mon serveur de ces règles, afin qu'ils deviennent accessibles. Pour l'instant, toutes les demandes sont envoyées au fichier index.php.
Répertoires à exclure: "admin" et "user".
Ainsi, les requêtes http: http://www.domain.com/admin/ ne doivent pas être transmises au fichier index.php.
ErrorDocument 404 /index.php?mod=error404
Options FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^([^/] )/([^/] )\.html$ index.php?lang=$1&mod=$2 [L]
RewriteRule ^([^/] )/$ index.php?lang=$1&mod=home [L]
[^/]
car un espace simple s'il n'y est pas autorisé (il faut l'échapper avec\<space>
).Réponses:
Essayez cette règle avant vos autres règles:
Cela mettra fin au processus de réécriture.
la source
($|/)
doit gérer les deux cas.RewriteCond
nécessite toujours unRewriteRule
auquel il est attaché. Et ajouter cette condition comme une négationRewriteCond
à toutRewriteRule
peut être assez volumineux, une seuleRewriteRule
comme sortie au-dessus de celles qui devraient être ignorées dans un tel cas est plus élégante.Vous pouvez également mettre un fichier .htaccess contenant
Dans les dossiers que vous souhaitez exclure de la réécriture (par les règles d'un fichier .htaccess situé plus haut dans l'arborescence). Simple mais efficace.
la source
AllowOverride
sur autre chose queNone
dans la configuration apache) oblige apache à rechercher .htaccess à chaque requête. donc si vous avez un site Web / serveur Web très fréquenté, l'accès au système de fichiers / au disque dur pourrait avoir un impact considérable sur les performances ...ajoutez une condition pour vérifier le répertoire admin, quelque chose comme:
la source
Si vous souhaitez supprimer un répertoire particulier de la règle (c'est-à-dire que vous souhaitez supprimer le répertoire foo ), vous pouvez utiliser:
La rewriteRule ci-dessus réécrira toutes les requêtes dans /index.php à l' exclusion des requêtes pour / foo / .
Pour exclure tous les répertoires existants, vous devrez utiliser la condition suivante au-dessus de votre règle:
la règle suivante
réécrit tout (sauf les répertoires) dans /index.php .
la source
Nous avons utilisé la règle mod_rewrite suivante:
Cela redirige (de façon permanente avec une redirection 301) tout le trafic vers le site vers http://www.newdomain.com , à l'exception des requêtes vers les ressources des répertoires / test et / my-folder. Nous transférons l'utilisateur vers la ressource exacte qu'il a demandée en utilisant le groupe de capture (. *), Puis en incluant 1 $ dans la nouvelle URL. Attention aux espaces.
la source
la source