Short URLs für phpBB2

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
m0bby
Mitglied
Beiträge: 82
Registriert: 23.03.2004 13:19
Kontaktdaten:

Problem: Short URLs und UPItoDB MOD

Beitrag von m0bby »

Hallo,

ich habe ein Problem in meinem Board beobachtet, bei dem ich nicht weiter komme.
Ich habe den "Unread Post Information to Database" MOD (UPItoDB) zusammen mit dem Short URLs MOD installiert.
Beim UPItoDB MOD werden alle von einem User gelesen Topic-IDs in einer Datenbank gespeichert. Dies geschieht in der viewtopic.php

Code: Alles auswählen

    if( $userdata['session_logged_in'] )
    {
        $user_id = $userdata[user_id];
        $post_id = $postrow[$i]['post_id'];
        $post_time = $postrow[$i]['post_time'];
        $post_edit_time = $postrow[$i]['post_edit_time'];
        $post_new = "";
        // $zeit_min_monat = time() - 2592000;
        $zeit_jetzt = time();
        $zeit_monat = $zeit_jetzt - 2592000;
        if ($post_time > $zeit_monat || $post_edit_time > $zeit_monat)
        {
            if ($visit_time < $post_time || $visit_time < $post_edit_time)
            {
                $post_new = "bgcolor=\"#ffffcc\"";
                
                if ( $post_id == $last_post_id || $visit_time < $post_edit_time)
                {
                    $sql = "DELETE FROM " . TOPIC_READ_TABLE . "
				        WHERE topic_id = $topic_id
			  		    AND user_id = $user_id";
                    
                    if (!$result = $db->sql_query($sql) )
                    {
                        message_die(GENERAL_ERROR, "Couldn't remove Topic Read database", "", __LINE__, __FILE__, $sql);
                    }
                    $visit_time_new = time();
                    
                    $sql = "INSERT INTO " . TOPIC_READ_TABLE . " (topic_id, post_id, user_id, visit_time, forum_id) VALUES ('$topic_id' , '$post_id' , '$user_id' , '$visit_time_new', '$forum_id')";
                    if (!$result = $db->sql_query($sql) )
                    {
                        message_die(GENERAL_ERROR, "Couldn't Build Topic Read database", "", __LINE__, __FILE__, $sql);
                    }
                }
            }
        }
    }
Das klappt auch ganz gut - auch zusammen mit dem Short URLs MOD. Aber leider nur solange ich mit dem Internet Explorer unterwegs bin. Wenn ich den Mozialla Firefox benutze passiert etwas seltsames:
Es wird zusätzlich zu der richtigen Topic-ID noch eine weiter Topic-ID in die Datenbank geschrieben. Und zwar genau die Topic-ID des nächst neueren Topics aus dem gleichen Forum. :-?

Ich hatte zunächst natürlich den UPItoDB MOD in Verdacht, der Übeltäter zu sein. Das hat sich aber nicht bestätigt. Ich habe herausgefunde, das der Fehler nur Auftritt, wenn in der page_tail.php die Funktion 'replace_for_mod_rewrite' aufgerufen wird.

Code: Alles auswählen

function replace_for_mod_rewrite(&$s) {
    // get the correct base_url: protocoll,url,path to make sure to rewrite only internal links
    if (empty($HTTP_SERVER_VARS['HTTP_HOST'])) {
        $server = getenv('HTTP_HOST');
    } else {
        $server = $HTTP_SERVER_VARS['HTTP_HOST'];
    }
    // IIS sets HTTPS=off
    if (isset($HTTP_SERVER_VARS['HTTPS']) && $HTTP_SERVER_VARS['HTTPS'] != 'off') {
        $proto = 'https://';
    } else {
        $proto = 'http://';
    }
    // Get the name of this URI
    // Start of with REQUEST_URI
    if (isset($HTTP_SERVER_VARS['REQUEST_URI'])) {
        $path = $HTTP_SERVER_VARS['REQUEST_URI'];
    } else {
        $path = getenv('REQUEST_URI');
    }
    if ((empty($path)) || (substr($path, -1, 1) == '/')) {
        // REQUEST_URI was empty or pointed to a path
        // Try looking at PATH_INFO
        $path = getenv('PATH_INFO');
        if (empty($path)) {
            // No luck there either
            // Try SCRIPT_NAME
            if (isset($HTTP_SERVER_VARS['SCRIPT_NAME'])) {
                $path = $HTTP_SERVER_VARS['SCRIPT_NAME'];
            } else {
                $path = getenv('SCRIPT_NAME');
            }
        }
    }
    
    $path = preg_replace('/[#\?].*/', '', $path);
    $path = dirname($path);
    
    if (preg_match('!^[/\\\]*$!', $path)) {
        $path = '';
    }
    
    $base_url = "$proto$server$path/";
    $prefix = '|"(?:'.$base_url.')?';
    // now that we know about the correct $prefix we can start the rewriting
    
    $urlin =
    array(
    $prefix . '(?<!/)index.php"|',
    $prefix . '(?<!/)viewforum.php\?f=([0-9]*)&(?:amp;)topicdays=([0-9]*)&(?:amp;)start=([0-9]*)"|',
    $prefix . '(?<!/)viewforum.php\?f=([0-9]*)"|',
    $prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)view=previous"|',
    $prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)view=next"|',
    $prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)postdays=([0-9]*)&(?:amp;)postorder=([a-zA-Z]*)&(?:amp;)start=([0-9]*)"|',
    $prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)start=([0-9]*)&(?:amp;)postdays=([0-9]*)&(?:amp;)postorder=([a-zA-Z]*)&(?:amp;)highlight=([a-zA-Z0-9]*)"|',
    $prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)start=([0-9]*)"|',
    $prefix . '(?<!/)viewtopic.php\?t=([0-9]*)"|',
    );
    $urlout = array(
    '"forums.html"',
    '"viewforum\\1-\\2-\\3.html"',
    '"forum\\1.html"',
    '"ptopic\\1.html"',
    '"ntopic\\1.html"',
    '"ftopic\\1-\\2-\\3-\\4.html"',
    '"ftopic\\1.html"',
    '"ftopic\\1-\\2.html"',
    '"ftopic\\1.html"',
    );
    
    $s = preg_replace($urlin, $urlout, $s);
    return $s;
}

Wenn ich die Zeile

Code: Alles auswählen

    $s = preg_replace($urlin, $urlout, $s);
in der Funktion auskommentiere tritt der Fehler nicht auf.
Und wie gesagt, er Fehler tritt nicht mit dem IE auf. :o
Es ist auch egal, ob Gzip ein- oder ausgeschaltet ist.

Aber wie kann das denn sein???

Was passiert beim Firefox, was beim IE keine Auswirkungen hat?

Hat jemand eine Idee?


Schönen Gruß
mObbY
Benutzeravatar
m0bby
Mitglied
Beiträge: 82
Registriert: 23.03.2004 13:19
Kontaktdaten:

Beitrag von m0bby »

Hat denn keiner eine Idee, wieso dieser 'preg_replace'-Befehl beim Firefox zu dem beschriebenen Fehler führt und beim IE nicht?
:(

Gruß
mObbY
Benutzeravatar
m0bby
Mitglied
Beiträge: 82
Registriert: 23.03.2004 13:19
Kontaktdaten:

Beitrag von m0bby »

Problem gelöst.
Schuld ist die Prefetching Funktion einiger Browser. Weiter Infos hier:
http://www.phpbb.de/topic35825.html

Schönen Gruß
mObbY
Christian_W
Ehemaliges Teammitglied
Beiträge: 5703
Registriert: 26.02.2004 00:09

Beitrag von Christian_W »

Boah, ich hab jetzt fast alles dieser über 40 Seiten gelesen.
Ich weiß noch nicht recht ob ich das ganze überhaupt mache aber ich hatte ein Problem mit den short-urls das evtl. anderen auch helfen kann.
Mein Provider macht die subdomains auch mit URL-Rewriting. Ich lege einfach ein Verzeichnis domain.de/forum an und kann es dann unter forum.domain.de aufrufen.
In der .htaccess gibt es ja den Teil:

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} /forum([0-9]*).*
RewriteRule (.*) /viewforum.php?f=%1 
Da dadurch forum doppelt belegt ist kommt es zu einem ERROR 500.
Lösung:
Entweder keine Subdomain forum benutzen.
Oder in der .htaccess und allen zugehörigen Änderungen anstelle von forum z.B. showforum benutzen (viewforum geht nicht weil das ja auch schon benuzt wird)

Gruß Christian
---
Destruktor
Mitglied
Beiträge: 123
Registriert: 27.02.2004 22:42
Wohnort: Verden (Aller)
Kontaktdaten:

Beitrag von Destruktor »

Ich habe es bei mir so, dass man beim Aufruf der Seite forum.domain.de einfach auf den Ordner domain.de/forum weitergeleitet wird.

http://forum.wsv-verden-jugend.de

Klappt bei mir ganz gut.. 8)
Benutzeravatar
m0bby
Mitglied
Beiträge: 82
Registriert: 23.03.2004 13:19
Kontaktdaten:

Beitrag von m0bby »

Christian_W hat geschrieben: In der .htaccess gibt es ja den Teil:

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} /forum([0-9]*).*
RewriteRule (.*) /viewforum.php?f=%1 
Da dadurch forum doppelt belegt ist kommt es zu einem ERROR 500.
Lösung:
Entweder keine Subdomain forum benutzen.
Oder in der .htaccess und allen zugehörigen Änderungen anstelle von forum z.B. showforum benutzen
Oder statt

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} /forum([0-9]*).* 
dieses hier schreiben:

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} /forum([0-9]+).* 
Dann kannst du weiterhin ein Verzeichnis "forum" benutzen.

Schönen Gruß
mObbY
Eistee
Mitglied
Beiträge: 19
Registriert: 06.12.2002 15:26
Wohnort: Augsburg
Kontaktdaten:

Beitrag von Eistee »

@larsneo

Deine Modifikation mit dem $prefix soll doch dazu da sein, dass auch vollständige Links (z.b. http://www.domain.de/viewtopic.php?p=xxx in einem Posting) umgeschrieben werden? Das funktioniert aber nicht...
Mfg, Eistee
------------------------------------------------
Portal für Mediengestalter/innen
Christian_W
Ehemaliges Teammitglied
Beiträge: 5703
Registriert: 26.02.2004 00:09

Beitrag von Christian_W »

@m0bby
Ich habe auch noch andere Lösungen gefunden. In erster Linie ging es darum auf mögliche Probleme hinzuweißen und schonmal einen Tipp zu geben wie man es evtl. lösen könnte.
Ich selbst bau das wahrscheinlich sowieso nicht ein. ;)
Trotzdem Danke für den Tipp der sicher dem ein oder anderen hilft.

Gruß Christian
---
Benutzeravatar
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Beitrag von larsneo »

@Eistee:
die prefix geschichte ist eigentlich dafür da, dass lediglich verweise auf die eigene seite beim konvertieren des output-buffer vor der ausgabe umgeschrieben werden - ansonsten könnten sonst ja ggfs. auch normale urls aus beiträgen angepasst werden.
gruesse aus dem wilden sueden
larsneo
..::[krapohl.net]::..
hmueller
Mitglied
Beiträge: 458
Registriert: 30.07.2002 10:39
Wohnort: Neuötting
Kontaktdaten:

Beitrag von hmueller »

Hallo,

hab' gerade in meinem Error-Log jede Menge Einträge mit folgendem Muster gefunden:

Code: Alles auswählen

mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary.
File does not exist: /is/(...)/forum2/404.htm
Was hat das zu bedeuten?
mod_rewrite funktioniert eigentlich

====

zweitens: sehe gerade an meinem Error-Log, daß sich einige User im Forum immer noch mit .php und angehängter SSID bewegen. Andere wiederum nicht.
An was kann das liegen?


====

@Mods: könnte man denn diesen Monster-Thread nicht irgendwie mal zusammenfassen (KB...) und einen neuen oder mehrere neue Threads aufmachen? Das ist mittlerweile ziemlich unübersichtlich hier.
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“