2010-12-14 10 views
8

Ich gebe URLs an Leute auf einer Website aus, die auf etwas Hässliches verweisen (auf der gleichen Website).Ist es in Ordnung, eine sehr lange .htaccess-Datei zu haben?

http://www.mydomain.com/cool-URL
tatsächlich verweist auf
http://www.mydomain.com/boring.php?id=478547&sessid=34734asdf7&otherboringdetails

Ich plane, dieses Ziel zu erreichen, indem die .htaccess-Datei ändern, wenn nötig. Ich werde das PHP-Skript dazu bringen, in die .htaccess-Datei zu schreiben und eine neue Rewrite-Regel hinzuzufügen, sobald eine neue URL ausgegeben wird (aus einem Admin-Bereich, den ein Nicht-Programmierer steuern kann [geben Sie den URL-Titel an neuer Eintrag, admin: es wird automatisch zugewiesen]].

Wird dies ein Problem sein, besonders nach etwa 1000 solcher URLs? Was ist die tatsächliche Anzahl, die akzeptabel ist? Ich kann mir das vorstellen: Der Server erhält eine Anfrage für eine URL, dann durchsucht er die .htaccess-Datei nach der richtigen Seite für diese URL und sendet den Benutzer schließlich an die richtige Seite. Wenn es sich um Datenbanksuche handelt, kann es sehr lange dauern, bis der Benutzer die richtige Seite erreicht hat ...

Irgendwelche Hinweise darauf, bitte?

+0

Ich bin interessiert. – Trufa

Antwort

18

Nein, es ist nicht in Ordnung und wird Ihre Seitengeschwindigkeit beeinträchtigen.

.htaccess-Dateien werden bei jeder Serveranfrage ausgewertet. Auch für statische Bilder, CSS- und JS-Dateien. Also bitten Sie den Webserver, während der Ausführung einer Anfrage 1000+ lange REGEX-Zeilen zu analysieren.

Auch die .htaccess-Datei des übergeordneten Verzeichnisses wird für Dateien verarbeitet, die sich ebenfalls im Unterverzeichnis befinden. Wenn sich Ihre große .htaccess-Datei im Stammverzeichnis der Website befindet, wird sie für alle Anfragen verarbeitet, die auch für Dateien in den Unterverzeichnissen (zusammen mit der .htaccess-Datei im Unterverzeichnis) durchgeführt werden.

Das mein Freund ist eine Menge Verarbeitung. Wenn Sie eine Seite mit 10 Bildern haben (zum Beispiel), werden 11 Mal Prozesse verarbeitet. Und je mehr in der Datei verarbeitet wird, desto mehr Zyklen dauert es. Also, alles in einer htaccess-Datei hat Auswirkungen. Ist dieser Aufprall jetzt bemerkbar? Es ist schwer zu sagen, wann es ein Problem wird. Aber es müsste ziemlich groß sein, da die Verarbeitung relativ einfach ist, was in Ihrem Fall ist.

Der Schlüssel mit einer Htaccess-Datei ist, es schlau zu machen. Sie möchten nicht 200 Einträge auflisten. Du kannst es mit nur ein paar Zeilen schlau machen (wenn du htaccess benutzen willst).

+0

Okay, ich werde nachforschen, um die richtige Regex für mein Problem zu machen. Danke für die Klarstellung :) –

1

Es sollte in Ordnung sein. Es kann sein, dass die Serververzögerung nur dann auftritt, wenn sie wirklich lang wird. Ich würde in mod_rewrite specs schauen, könnten Sie in der Lage sein, die Forwards mit ein paar Zeilen & Regex-Funktion zu automatisieren. Ich weiß nicht genug über die URL-Variablen, die weitergegeben werden, um Ihnen ein Beispiel zu geben.

5

Ich würde einen einfachen Test durchführen: Erstellen Sie eine große. Htaccess-Datei mit zufälligen URLs, und messen Sie die resultierende Leistung selbst.

import random,string 

def rand_string(): 
    length = random.randint(4,10) 
    res = [] 
    for i in range(length): 
     res.append(random.choice(string.letters)) 
    return ''.join(res) 

for i in range(1000): 
    print "RewriteRule %s http://www.mydomain.com/boring.php?%s [R]" % \ 
    (rand_string(), rand_string()) 
4

Mit so viel Regeln ist wirklich nicht ratsam. Es ist nicht so, dass sie sich in einer .htaccess-Datei befinden oder dass sie für jede Anfrage getestet werden. (Abhängig von der Konfiguration kann dies auch passieren, wenn Sie sie in die Konfiguration Ihres Servers oder virtuellen Hosts einfügen.)

Es ist die bloße Tatsache, dass es eine riesige Anzahl von Regeln ist, die getestet werden und, abhängig von den Regeln, jede Regel muss getestet werden, bis ein Treffer gefunden wird.

Nun, Sie könnten dem entgegenwirken, indem Sie die Regeln in der Reihenfolge der Übereinstimmungswahrscheinlichkeit arrangieren, so dass die Wahrscheinlichkeit, eine Übereinstimmung früh zu finden, hoch ist. Aber die Komplexität ist im schlimmsten Fall immer noch O (n).

Wenn Sie wirklich so viele Zuordnungen benötigen und die Zuordnungen fest sind, können Sie eine RewriteMap hash file verwenden, die eine Komplexität von O (1) anstelle von O (n) für die getrennten Regeln hat. Oder Sie verschieben das Mapping in Ihre PHP-Anwendung und tun es dort.

+0

Wow tolle Tipps und Danke für den Link! –

1

Es ist definitiv nicht in Ordnung, wie einige Leute hier erwähnt haben.

Kennen Sie alle URLs, die Sie vorher umschreiben möchten? Wenn dies der Fall ist, können Sie die Regeln in einer Datenbank speichern, durch die Regeln iterieren und die tatsächlichen URLs generieren und sie in Memcache speichern, wobei der Schlüssel die gut aussehende URL und der Wert die tatsächliche URL des Inhalts ist.

Dann, wenn die Anfrage kommt, suchen Sie den Schlüssel in Memcache, und leiten Sie den Benutzer auf die echte URL. Ich glaube nicht, dass du dafür .htaccess brauchst.

Verwandte Themen