fragen stichworte

URL-Umschreibung außer für einen Ordner

Ich habe bereits eine Frage zum Umleiten von Benutzern mit einer bestimmten IP Apache Allow oder Redirect-Benutzer gestellt, dank dmah funktioniert es einwandfrei.
Ich wollte jedoch noch weiter gehen und nicht nur einen speziellen Ordner einschränken/zulassen, sondern eine weitere Regel hinzufügen (wie hier dargestellt: http://www.kavoir.com/2010/02/use-php-to- handle-all-incoming-url-request-in-a-seo-friendly-manner.html)
Hier ist mein .htaccess:

RewriteEngine on
# Define the Error Document Path
ErrorDocument 404/404.php
# Condition for the Rewriting rule: IP NOT starting with 1.2.3.4 (example)
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4
# Condition is matched -> redirect 404 error doc
RewriteRule ^administration/(.+) [R=404,L]

#SEO modification
RewriteBase/
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule/$/index.php [L]

Wenn ich den SEO-Modifikationsteil nicht hinzufüge, funktioniert es. Sobald ich versuche, in das Verzeichnis/administration zu gelangen, habe ich eine 404-Umleitung erhalten. Aber wenn ich die SEO hinzufüge, funktioniert die erste Regel nicht mehr. Ich meine, das [L] -Flag wird nicht verwendet.
Ich habe es mit S = 1 anstelle von L versucht, aber die SEO funktioniert dann auch für/Administration :(
Ich kann keine gute Seite mit einigen Erklärungen für die S = X-Bedingung finden, die eine if-then-else-Anweisung macht, noch verstehe ich nicht, warum mit dem L-Flag in der ersten Regel die Konfigurationsdatei weiterhin analysiert wird.
Um genauer zu sein:
Ich habe eine Datei-/Ordnerstruktur wie:

/
/Verwaltung
/verwaltung/geheimnis/
/administration/index.php
/Artikel
/Artikel/Test
/article/test/cool.html
/index.php
/.htaccess

Und ich möchte, dass die/index.php ALLE URLs behandelt, mit Ausnahme derjenigen, die sich für den Verwaltungsordner befinden (wird in der Datei/administration/index.php nur gehandhabt, wenn ich im richtigen IP/Bereich bin). Was bedeutet: http://www.foo.com/article/test/cool.html wird an apache gesendet, der die URL in/index.php umschreibt und mit einer explode () php-Funktion habe ich die Parameter article und test und cool erhalten .html.

Problem ... wenn ich http://www.foo.com/administration/eingebe ... wird es von/index.php auch außerhalb der erlaubten IP-Adresse gehandhabt! Auch mit dem L-Flag der RewriteRule bezüglich des Administrationsordners ... Ich habe viele Kombinationen getestet:

  • Hinzufügen von S = 1 anstelle von L für die Regel mit der IP ... kein Glück
  • Hinzufügen von RewriteRule ^ administration/$/administration/index.php [L] vor der letzten Umschreibungsregel funktioniert jedoch nur für/administration, wenn ich/administration/secret stelle, wird dies von/index.php: @
  • und viele andere Sachen, die gerade einen coolen internen Serverfehler gaben

Vielen Dank für die Hilfe und Ideen :-)

Vielen Dank nochmal an dmah !! Hier ist meine Arbeit wie ein Zauber. Htaccess:

RewriteEngine on
# Define the Error Document Path
ErrorDocument 404/404.php
# Condition for the Rewriting rule: IP NOT starting with 1.2.3.4 (example)
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4
# Trying to access administration pages.
RewriteCond %{REQUEST_URI} ^/administration
# Redirect to the 404 page.
RewriteRule .+/404.php [R=404,L]

#SEO modification
#RewriteBase/
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !^/administration
RewriteRule/$/index.php [L]

antworten

Ich glaube nicht, dass das Problem im SEO-Bereich liegt.

Ihre erste RewriteRule ist defekt. Die Syntax lautet:

Ersetzen des RewriteRule-Musters [Flags]

und ich denke, Sie möchten, dass eine zweite RewriteCond überprüft, ob der angeforderte URI "Administration" enthält. So etwas wie:

# Condition for the Rewriting rule: IP NOT starting with 1.2.3.4 (example)
RewriteCond %{REMOTE_ADDR} !^1\\.2\\.3\\.4
# Trying to access administration pages.
RewriteCond %{REQUEST_URI} ^administration
# Redirect to the 404 page.
RewriteRule .+ http://localhost/404_page.html [R=404,L]