Short URLs für phpBB2 (reloaded / RFC)

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.

Short URLs für phpBB2 (reloaded / RFC)

Beitragvon larsneo » 31.12.2004 11:43

Als Ergänzung zum bestehenden Topic Short URLs für phpBB2 habe ich mich zum Jahresende einmal dran gemacht, das Rewriting möglichst komplett auszuführen und 'Doppellinks' nach Möglichkeit zu unterbinden.
Als Zwischenstand und auch als 'Request for Comments' hier nun einmal das aktuell im nuForum im Einsatz befindliche Rewriting - quasi als Release Candidate und nicht zum Einsatz in Produktivumgebungen - das gilt insbesondere wenn man sich mit dem Thema nicht auskennt.

Einige grundsätzliche Dinge bitte ich zu beachten
- Die Grundlagen zum Rewriting sind im o.a. Topic ausführlich beschrieben, hier geht es um Optimierungen die noch nicht wirklich ausgetestet sind
- Das Rewriting via preg_replace kostet Performance, je umfangreicher umso mehr (das nuForum läuft auf einem eigenen Server)
- Eventuelle Fragen zum Einsatz der .htaccess am Besten an den Provider richten, es gibt teilweise auch unterschiedliche Syntaxmöglichkeiten
- Die folgenden Snippets sind aktuell erst einmal für Testumgebungen gedacht - und sollten nur von Leuten ausprobiert werden, die sich mit dem Thema Rewriting bereits auseinandergesetzt haben.
- Die u.a. Snippets beziehen sich teilweise auch auf im nuForum integrierte Mods/Hacks

Bislang bekannte Probleme
- Die Suche nach allen Beiträgen von Benutzern mit bestimmten Sonderzeichen ('+') funktioniert (noch) nicht - wer eine regexp für im phpBB2 erlaubte Benutzer greifbar hat bitte melden ;-)

Weiterführende Informationen rund um das Thema Suchmaschinen-Optimierung und auch eine für die Short URLs angepasste Google Sitemap finden sich übrigens auch in meinem SEO-Blog.

Short URLs für phpBB2 (reloaded / RFC)
Anpassungen gegenüber dem Original-Topic
als neue .htaccess (Pfadangaben ggfs. anpassen!) [1]
Code: Alles auswählen
RewriteEngine On

# prevent access from santy webworm a-e
RewriteCond %{QUERY_STRING} ^(.*)highlight=\%2527 [OR]
RewriteCond %{QUERY_STRING} ^(.*)rush=\%65\%63\%68 [OR]
RewriteCond %{QUERY_STRING} ^(.*)rush=echo [OR]
RewriteCond %{QUERY_STRING} ^(.*)wget\%20 [OR]
RewriteCond %{QUERY_STRING} ^(.*)cmd=
RewriteRule ^.*$ http://127.0.0.1/ [R,L]

# prevent pre php 4.3.10 bug
RewriteCond %{HTTP_COOKIE}% s:(.*):\%22test1\%22\%3b
RewriteRule ^.*$ http://127.0.0.1/ [R,L]

# prevent perl user agent (most often used by santy)
RewriteCond %{HTTP_USER_AGENT} ^lwp.* [NC]
RewriteRule ^.*$ http://127.0.0.1/ [R,L]

# extended rewriting only for .html [thx to Caterham]
RewriteRule !\.html$ - [L]

# Short URL implementation [larsneo]
RewriteCond %{REQUEST_URI} ^/nuforum/forums\.html
RewriteRule (.*) /nuforum/index.php [R=301,L]

RewriteCond %{REQUEST_URI} ^/nuforum/index-mark\.html
RewriteRule (.*) /nuforum/index.php?mark=forums [L]

RewriteCond %{REQUEST_URI} ^/nuforum/index\.html
RewriteRule (.*) /nuforum/index.php [L]

RewriteCond %{REQUEST_URI} ^/nuforum/category([0-9]*)\.html
RewriteRule (.*) /nuforum/index.php?c=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/forum([0-9]*)-([0-9]*)-([0-9]*)\.html 
RewriteRule (.*) /nuforum/viewforum.php?f=%1&topicdays=%2&start=%3 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/forum([0-9]*)-([0-9]*)\.html 
RewriteRule (.*) /nuforum/viewforum.php?f=%1&start=%2 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/forum([0-9]*)-mark\.html
RewriteRule (.*) /nuforum/viewforum.php?f=%1&mark=topics [L]

RewriteCond %{REQUEST_URI} ^/nuforum/forum([0-9]*)\.html
RewriteRule (.*) /nuforum/viewforum.php?f=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/ptopic([0-9]*)\.html
RewriteRule (.*) /nuforum/viewtopic.php?t=%1&view=previous [L]

RewriteCond %{REQUEST_URI} ^/nuforum/ntopic([0-9]*)\.html
RewriteRule (.*) /nuforum/viewtopic.php?t=%1&view=next [L]

RewriteCond %{REQUEST_URI} ^/nuforum/ftopic([0-9]*)-([0-9]*)-([a-zA-Z]*)-([0-9]*)-([a-zA-Z0-9]*)\.html
RewriteRule (.*) /nuforum/viewtopic.php?t=%1&start=%2&postdays=%3&postorder=%4&highlight=%5 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/ftopic([0-9]*)-([0-9]*)-([a-zA-Z]*)-([0-9]*)\.html
RewriteRule (.*) /nuforum/viewtopic.php?t=%1&postdays=%2&postorder=%3&start=%4 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/ftopic([0-9]*)-([0-9]*)\.html
RewriteRule (.*) /nuforum/viewtopic.php?t=%1&start=%2 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/ftopic([0-9]*)\.html
RewriteRule (.*) /nuforum/viewtopic.php?t=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/fpost([0-9]*)\.html
RewriteRule (.*) /nuforum/viewtopic.php?p=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/post-newtopic-([0-9]*)\.html
RewriteRule (.*) /nuforum/posting.php?mode=newtopic&f=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/post-reply-([0-9]*)\.html
RewriteRule (.*) /nuforum/posting.php?mode=reply&t=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/post-([a-z]*)-([0-9]*)\.html
RewriteRule (.*) /nuforum/posting.php?mode=%1&p=%2 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/album\.html
RewriteRule (.*) /nuforum/album.php [L]

RewriteCond %{REQUEST_URI} ^/nuforum/albumpic([0-9]*)-([a-z]*)\.html
RewriteRule (.*) /nuforum/album_page.php?pic_id=%1&mode=%2 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/albumpic([0-9]*)\.html
RewriteRule (.*) /nuforum/album_page.php?pic_id=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/palbum\.html
RewriteRule (.*) /nuforum/album_personal_index.php [L]

RewriteCond %{REQUEST_URI} ^/nuforum/palbum([0-9]*)\.html
RewriteRule (.*) /nuforum/album_personal.php?user_id=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/profile([0-9]*)\.html
RewriteRule (.*) /nuforum/profile.php\?mode=viewprofile&u=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/search-author-(.*)\.html
RewriteRule (.*) /nuforum/search.php\?search_author=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/search-([0-9]*)-([0-9]*)\.html
RewriteRule (.*) /nuforum/search.php\?search_id=%1&start=%2 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/search-([a-zA-Z]*)\.html
RewriteRule (.*) /nuforum/search.php\?search_id=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/privmsg-([a-zA-Z]*)-([0-9]*)\.html
RewriteRule (.*) /nuforum/privmsg.php\?mode=%1&u=%2 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/privmsg-([a-zA-Z]*)\.html
RewriteRule (.*) /nuforum/privmsg.php\?folder=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/register\.html
RewriteRule (.*) /nuforum/profile.php\?mode=register&agreed=true [L]

RewriteCond %{REQUEST_URI} ^/nuforum/profile-([a-zA-Z0-9]*)\.html
RewriteRule (.*) /nuforum/profile.php\?mode=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/map-([0-9]*)\.html
RewriteRule (.*) /nuforum/map.php\?highlight=%1 [L]

RewriteCond %{REQUEST_URI} ^/nuforum/map\.html
RewriteRule (.*) /nuforum/map.php [L]

RewriteCond %{REQUEST_URI} ^/nuforum/faq\.html
RewriteRule (.*) /nuforum/faq.php [L]

RewriteCond %{REQUEST_URI} ^/nuforum/search\.html
RewriteRule (.*) /nuforum/search.php [L]

RewriteCond %{REQUEST_URI} ^/nuforum/memberlist\.html
RewriteRule (.*) /nuforum/memberlist.php [L]

RewriteCond %{REQUEST_URI} ^/nuforum/groups\.html
RewriteRule (.*) /nuforum/groupcp.php [L]

RewriteCond %{REQUEST_URI} ^/nuforum/report\.html
RewriteRule (.*) /nuforum/report.php [L]

RewriteCond %{REQUEST_URI} ^/nuforum/online\.html
RewriteRule (.*) /nuforum/viewonline.php [L]


Änderungen in /includes/page_header.php
Code: Alles auswählen
//
// start Short URL implementation [larsneo]
//
// start buffering
ob_start();

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\?mark=forums"|',
$prefix . '(?<!/)index.php"|',
$prefix . '(?<!/)index.php\?c=([0-9]*)"|',
$prefix . '(?<!/)viewforum.php\?f=([0-9]*)&(?:amp;)topicdays=0&(?:amp;)start=0"|',
$prefix . '(?<!/)viewforum.php\?f=([0-9]*)&(?:amp;)topicdays=0&(?:amp;)start=([0-9]*)"|',
$prefix . '(?<!/)viewforum.php\?f=([0-9]*)&(?:amp;)topicdays=([0-9]*)&(?:amp;)start=([0-9]*)"|',
$prefix . '(?<!/)viewforum.php\?f=([0-9]*)&(?:amp;)mark=topics"|',
$prefix . '(?<!/)viewforum.php\?f=([0-9]*)"|',
$prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)highlight="|',
$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;)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;)postdays=0&(?:amp;)postorder=asc&(?:amp;)start=0"|',
$prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)postdays=0&(?:amp;)postorder=asc&(?:amp;)start=([0-9]*)"|',
$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"|',
$prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)start=([0-9]*)"|',
$prefix . '(?<!/)viewtopic.php\?t=([0-9]*)"|',
$prefix . '(?<!/)viewtopic.php\?p=([0-9]*)&(?:amp;)highlight=#([0-9]*)"|',
$prefix . '(?<!/)viewtopic.php\?p=([0-9]*)#([0-9]*)"|',
$prefix . '(?<!/)posting.php\?mode=newtopic&(?:amp;)f=([0-9]*)"|',
$prefix . '(?<!/)posting.php\?mode=reply&(?:amp;)t=([0-9]*)"|',
$prefix . '(?<!/)posting.php\?mode=([a-z]*)&(?:amp;)p=([0-9]*)"|',
$prefix . '(?<!/)album.php"|',
$prefix . '(?<!/)album_personal_index.php"|',
$prefix . '(?<!/)album_personal.php\?user_id=([0-9]*)"|',
$prefix . '(?<!/)profile.php\?mode=viewprofile&(?:amp;)u=([0-9]*)"|',
$prefix . '(?<!/)search.php\?search_author=([[:alnum:]%+\.]+)"|',
$prefix . '(?<!/)search.php\?search_id=([0-9]*)&(?:amp;)start=([0-9]*)"|',
$prefix . '(?<!/)search.php\?search_id=([a-zA-Z]*)"|',
$prefix . '(?<!/)privmsg.php\?mode=([a-zA-Z]*)&(?:amp;)u=([0-9]*)"|',
$prefix . '(?<!/)privmsg.php\?folder=([a-zA-Z]*)"|',
$prefix . '(?<!/)profile.php\?mode=register&(?:amp;)agreed=true"|',
$prefix . '(?<!/)profile.php\?mode=([0-9a-zA-Z]*)"|',
$prefix . '(?<!/)map.php\?highlight=([0-9]*)"|',
$prefix . '(?<!/)map.php"|',
$prefix . '(?<!/)faq.php"|',
$prefix . '(?<!/)search.php"|',
$prefix . '(?<!/)memberlist.php"|',
$prefix . '(?<!/)groupcp.php"|',
$prefix . '(?<!/)report.php"|',
$prefix . '(?<!/)viewonline.php"|',
);
$urlout = array(
'"index-mark.html"',
'"index.html"',
'"category\\1.html"',
'"forum\\1.html"',
'"forum\\1-\\2.html"',
'"forum\\1-\\2-\\3.html"',
'"forum\\1-mark.html"',
'"forum\\1.html"',
'"ftopic\\1.html"',
'"ptopic\\1.html"',
'"ntopic\\1.html"',
'"ftopic\\1.html"',
'"ftopic\\1.html"',
'"ftopic\\1-\\2.html"',
'"ftopic\\1-\\2-\\3-\\4.html"',
'"ftopic\\1.html"',
'"ftopic\\1-\\2.html"',
'"ftopic\\1.html"',
'"fpost\\1.html#\\2"',
'"fpost\\1.html#\\2"',
'"post-newtopic-\\1.html"',
'"post-reply-\\1.html"',
'"post-\\1-\\2.html"',
'"album.html"',
'"palbum.html"',
'"palbum\\1.html"',
'"profile\\1.html"',
'"search-author-\\1.html"',
'"search-\\1-\\2.html"',
'"search-\\1.html"',
'"privmsg-\\1-\\2.html"',
'"privmsg-\\1.html"',
'"register.html"',
'"profile-\\1.html"',
'"map-\\1.html"',
'"map.html"',
'"faq.html"',
'"search.html"',
'"memberlist.html"',
'"groups.html"',
'"report.html"',
'"online.html"',
);

$s = preg_replace($urlin, $urlout, $s);
return $s;
}
//
// end Short URL implementation [larsneo]
//

(und natürlich die weiteren Anpassungen aus dem Original-Topic)

EDIT:
01.04.05 .htaccess Syntax optimiert
13.03.06 Link zur Google Sitemap hinzugefügt
Zuletzt geändert von larsneo am 13.03.2006 10:27, insgesamt 3-mal geändert.
gruesse aus dem wilden sueden
larsneo
..::[cms-sicherheit]::..
Benutzeravatar
larsneo
Valued Contributor
 
Beiträge: 2613
Registriert: 07.03.2002 16:23
Wohnort: schwäbisch gmünd

Beitragvon kratzer54847 » 31.12.2004 12:56

hoi larsneo,

wo liegen denn nun die ungefähren Neuerungen dieser Version?

mfg Johny
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Benutzeravatar
kratzer54847
Mitglied
 
Beiträge: 3065
Registriert: 20.01.2003 17:34
Wohnort: Düsseldorf/Hannover/Berlin

Beitragvon larsneo » 31.12.2004 13:06

mit der neuen version wird nahezu alles umgeschrieben, fehler (wie z.b. in der highlight- und postdays-behandlung) wurden korrigiert und mehrfachlinks auf identischen content sollten reduziert/behoben sein.
gruesse aus dem wilden sueden
larsneo
..::[cms-sicherheit]::..
Benutzeravatar
larsneo
Valued Contributor
 
Beiträge: 2613
Registriert: 07.03.2002 16:23
Wohnort: schwäbisch gmünd

Beitragvon kratzer54847 » 31.12.2004 13:10

hoi,

eine Frage hätte ich da noch:

warum wird die privmsg.php mit indiziert?
auf die sollte eine Suchmaschine doch eigentlich keinen Zugriff haben?

mfg Johny
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Benutzeravatar
kratzer54847
Mitglied
 
Beiträge: 3065
Registriert: 20.01.2003 17:34
Wohnort: Düsseldorf/Hannover/Berlin

Beitragvon Nico Haase » 31.12.2004 13:36

trotzdem sehen die urls auch da doch besser aus ;)
Buchtips.net bietet mehr als 2500 Buchrezensionen
Benutzeravatar
Nico Haase
Mitglied
 
Beiträge: 1100
Registriert: 10.08.2003 15:19
Wohnort: Neu-Anspach / Darmstadt

Beitragvon larsneo » 31.12.2004 13:57

yep - irgendwie ist das ganze ja auch ein POC aus langweiligen stunden :cookie:
gruesse aus dem wilden sueden
larsneo
..::[cms-sicherheit]::..
Benutzeravatar
larsneo
Valued Contributor
 
Beiträge: 2613
Registriert: 07.03.2002 16:23
Wohnort: schwäbisch gmünd

Beitragvon adidas » 31.12.2004 15:03

toll, das andere habe ich schwer hinbekommen, weil ich ne alte catogeries hiarchy mod habe (danke rabbit, er hat mir gehilfen :D)

nun kriege ich das bestimmt nie hin :cry:
>>>>>>0<<<<<<
adidas
Mitglied
 
Beiträge: 1204
Registriert: 14.08.2003 00:09

Beitragvon Nico Haase » 01.01.2005 10:15

du meinst, du hast jetzt grad die andere short-url-version drin, die funktioniert auch, und dann kommt ne neue? hmm: einfach alte ordentlich ausbauen und neue drüber ;)
Buchtips.net bietet mehr als 2500 Buchrezensionen
Benutzeravatar
Nico Haase
Mitglied
 
Beiträge: 1100
Registriert: 10.08.2003 15:19
Wohnort: Neu-Anspach / Darmstadt

Beitragvon larsneo » 01.01.2005 11:54

larsneo hat geschrieben:[...]
quasi als Release Candidate und nicht zum Einsatz in Produktivumgebungen - das gilt insbesondere wenn man sich mit dem Thema nicht auskennt.
[...]
Die folgenden Snippets sind aktuell erst einmal für Testumgebungen gedacht - und sollten nur von Leuten ausprobiert werden, die sich mit dem Thema Rewriting bereits auseinandergesetzt haben.

:roll:
gruesse aus dem wilden sueden
larsneo
..::[cms-sicherheit]::..
Benutzeravatar
larsneo
Valued Contributor
 
Beiträge: 2613
Registriert: 07.03.2002 16:23
Wohnort: schwäbisch gmünd

Beitragvon saerdnaer » 01.01.2005 14:32

gibts irgendwo ne demo?

ah
Benutzeravatar
saerdnaer
Ehemaliger
 
Beiträge: 4268
Registriert: 21.04.2001 02:00

Nächste

Zurück zu phpBB 2.0: Mods in Entwicklung

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste