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.
Benutzeravatar
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Short URLs für phpBB2 (reloaded / RFC)

Beitrag von larsneo »

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 09:27, insgesamt 3-mal geändert.
gruesse aus dem wilden sueden
larsneo
..::[krapohl.net]::..
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

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
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Beitrag von larsneo »

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
..::[krapohl.net]::..
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

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
Nico Haase
Mitglied
Beiträge: 1100
Registriert: 10.08.2003 15:19
Wohnort: Neu-Anspach / Darmstadt
Kontaktdaten:

Beitrag von Nico Haase »

trotzdem sehen die urls auch da doch besser aus ;)
Buchtips.net bietet mehr als 2500 Buchrezensionen
Benutzeravatar
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Beitrag von larsneo »

yep - irgendwie ist das ganze ja auch ein POC aus langweiligen stunden :cookie:
gruesse aus dem wilden sueden
larsneo
..::[krapohl.net]::..
adidas
Mitglied
Beiträge: 1204
Registriert: 14.08.2003 00:09

Beitrag von adidas »

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<<<<<<
Benutzeravatar
Nico Haase
Mitglied
Beiträge: 1100
Registriert: 10.08.2003 15:19
Wohnort: Neu-Anspach / Darmstadt
Kontaktdaten:

Beitrag von Nico Haase »

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
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Beitrag von larsneo »

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
..::[krapohl.net]::..
Benutzeravatar
saerdnaer
Ehemaliges Teammitglied
Beiträge: 4268
Registriert: 21.04.2001 02:00

Beitrag von saerdnaer »

gibts irgendwo ne demo?

ah
Antworten

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