Wie kann ich meine .htaccess skip Regeln bedingt machen?
-
10-07-2019 - |
Frage
Ich möchte alle URLs umleiten, die "_js", "_ css", "_img" usw. nicht zu meinem Dispatch Skript. Irgendwie funktioniert es nicht. Zum Beispiel werden alle Dateien in meinem / _js / Ordner sind unaccessible (Bedeutung: Sie wohnen in diesem Ordner, anstatt sich auf die physischen Dateien auf index.php gesendet)
.Hier ist meine .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]
Edit:
Beachten Sie meine Ordnerstruktur. Könnte es das Problem Quelle sein?
Ich habe eine „v1“ und „v2“ Ordnerstruktur. Diese .htaccess sitzt im „v2“ -Ordner. eine Ebene über, ich habe eine .htaccess, die alle Anforderungen an „v2“ umleitet.
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
Lösung
Sie verwenden das falsche Zeichen, ¦
( gebrochener bar , U + 00A6) statt |
( vertikale Linie , U + 007C), und falsche Muster für REQUEST_URI
.
RewriteCond %{REQUEST_URI} ^/v2/(_admin/|_css/|_js/|_img/)
RewriteRule . - [S=9]
oder für die .htaccess-Datei in Ihrem v2 Verzeichnis nur:
RewriteRule ^_(admin|css|js|img)/ - [S=9]
Andere Tipps
Hier sind einige zufällige Fehlerbehebungen, die das eigentliche Problem nicht beheben können oder nicht, die (siehe mein Kommentar) nicht ganz klar ist und die geholfen werden könnte, wenn Sie den Server steuern und die RewriteLog ermöglichen, über:
RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9
, aber Sie müssen diese Konfiguration in Hauptserver setzen.
Wie gesagt, zwei Hauptprobleme:
- Mangel an Verwendung von QSA-Flag (nicht wirklich relevant)
- Die übermäßige Gebrauch von Schrägstrichen (wahrscheinlich relevant in dem eigentlichen Problem, sieht neue Version der Skipping-Regel)
Hier geht die geänderte Datei
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: Auch angesichts der Ordnerstruktur, versuchen Sie, die v2 .htaccess am Anfang Folgendes hinzufügen:
RewriteBase /
Sie haben noch nicht erklärt, wenn Sie können oder nicht RewriteLog verwenden können (ich nehme an, Sie können nicht)