Short URLs für phpBB2 (reloaded / RFC)
Verfasst: 31.12.2004 10: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]
Änderungen in /includes/page_header.php
(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
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]
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]
//
EDIT:
01.04.05 .htaccess Syntax optimiert
13.03.06 Link zur Google Sitemap hinzugefügt