Question

Je souhaite rediriger toutes les URL qui ne contiennent pas "_js", "_css", "_img", etc. vers mon script d'envoi. D'une certaine manière cela ne fonctionne pas. Par exemple, tous les fichiers de mon dossier / _js / sont inaccessibles (ils sont donc envoyés à index.php au lieu d’accéder aux fichiers physiques résidant dans ce dossier).

Voici mon htaccess:

IndexIgnore *
Options +FollowSymLinks
RewriteEngine on

# if the following conditions are met, SKIP the rewriteRules.

RewriteCond %{REQUEST_URI} ^/(_admin/¦_css/¦_js/¦_img/)
RewriteRule . - [S=9]


# Externally redirect to add missing trailing slash
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://%{HTTP_HOST}/$1/?%{QUERY_STRING} [NC,R,L]

# SIX PARAMS
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?section=$1&item=$2&menu=$3&content=$4&id=$5&title=$6&%{QUERY_STRING} [NC,L]

# FIVE  PARAMS
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?section=$1&item=$2&menu=$3&content=$4&id=$5&%{QUERY_STRING} [NC,L]

# FOUR PARAMS
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?section=$1&item=$2&menu=$3&content=$4&%{QUERY_STRING} [NC,L]

# THREE PARAMS : projects/touch/texts/
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /index.php?section=$1&item=$2&menu=$3&%{QUERY_STRING} [NC,L]

# TWO PARAMS: downloads
RewriteRule ^downloads/([^/]+)/$ index.php?section=downloads&item=$1&%{QUERY_STRING}  [NC,L]

# TWO PARAMS:
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?section=$1&item=$2&%{QUERY_STRING} [NC,L]

# TAG URL : index.php?tag=space%2C+navigable+music#5
RewriteRule ^tag/([a-z0-9_\-]+)/$ index.php?tag=$1&%{QUERY_STRING} [NC,L]
# ONE PARAM
RewriteRule ^([a-z0-9_\-]+)/$ index.php?section=$1&%{QUERY_STRING} [NC,L]

Modifier:

Notez la structure de mon dossier. Serait-ce la source du problème?

J'ai un " v1 " et " v2 " structure de dossier. Ce fichier .htaccess se trouve dans le répertoire " v2 " dossier. un niveau supérieur, j’ai un .htaccess qui redirige toutes les requêtes vers "v2".

root 
  L.htaccess << dispatch between v1 and v2 folders 
  L v1 L v2 L.htaccess << the .htaccess code posted above 
  L _admin L all my website files & folders
Était-ce utile?

La solution

Vous utilisez le mauvais caractère, & # 166; ( barre brisée , U + 00A6) au lieu de | ( ligne verticale , U + 007C) et modèle incorrect pour REQUEST_URI .

RewriteCond %{REQUEST_URI} ^/v2/(_admin/|_css/|_js/|_img/)
RewriteRule . - [S=9]

Ou pour le fichier .htaccess dans votre répertoire v2 , simplement:

RewriteRule ^_(admin|css|js|img)/ - [S=9]

Autres conseils

Voici quelques corrections aléatoires qui peuvent ou non résoudre le problème, qui n’est pas tout à fait clair (voir mon commentaire) et qui pourraient être aidées si vous contrôliez le serveur et activez le RewriteLog, via:

RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9

mais vous devez mettre cela dans la configuration du serveur principal.

Cela dit, deux problèmes principaux:

  • Absence d'utilisation du drapeau QSA (pas vraiment pertinent)
  • Utilisation excessive de barres obliques (probablement pertinente dans le problème, voir la nouvelle version de la règle de saut)

Voilà le fichier modifié

IndexIgnore *
Options +FollowSymLinks
RewriteEngine on

# if the following conditions are met, SKIP the rewriteRules.

RewriteCond %{REQUEST_URI} ^(_admin¦_css¦_js¦_img)
RewriteRule . - [L]


# Externally redirect to add missing trailing slash. Not really needed, AFAICS
# RewriteRule ^(([^/]+/)*[^/]+)$ http://%{HTTP_HOST}/$1/ [NC,R,L,QSA]

# SIX PARAMS
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?section=$1&item=$2&menu=$3&content=$4&id=$5&title=$6 [NC,L,QSA]

# FIVE  PARAMS
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?section=$1&item=$2&menu=$3&content=$4&id=$5 [NC,L,QSA]

# FOUR PARAMS
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?section=$1&item=$2&menu=$3&content=$4 [NC,L,QSA]

# THREE PARAMS : projects/touch/texts/
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /index.php?section=$1&item=$2&menu=$3 [NC,L,QSA]

# TWO PARAMS: downloads
RewriteRule ^downloads/([^/]+)/?$ index.php?section=downloads&item=$1  [NC,L,QSA]

# TWO PARAMS:
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?section=$1&item=$2 [NC,L,QSA]

# TAG URL : index.php?tag=space%2C+navigable+music#5
RewriteRule ^tag/([^/]+)/?$ index.php?tag=$1 [NC,L,QSA]
# ONE PARAM
RewriteRule ^([^/]+)/?$ index.php?section=$1 [NC,L,QSA]

EDIT: Étant donné la structure de dossiers expliquée, essayez d’ajouter à la v2 .htaccess au début ce qui suit:

RewriteBase /

Vous n'avez toujours pas expliqué si vous pouvez ou non utiliser RewriteLog (je suppose que vous ne pouvez pas le faire)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top