<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Schnurpsel &#187; Konfiguration</title>
	<atom:link href="http://schnurpsel.de/themen/wordpress/konfiguration/feed/" rel="self" type="application/rss+xml" />
	<link>http://schnurpsel.de</link>
	<description>Das Putzlowitsch Testblog für alles mögliche</description>
	<lastBuildDate>Sun, 05 Sep 2010 17:40:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=Vista 7</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Wordpress mit Permalinks &#8211; den Webserver entlasten</title>
		<link>http://schnurpsel.de/wordpress-mit-permalinks-den-webserver-entlasten-590/</link>
		<comments>http://schnurpsel.de/wordpress-mit-permalinks-den-webserver-entlasten-590/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:22:47 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Geschwindigkeit]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[Permalink]]></category>
		<category><![CDATA[Rewrite]]></category>
		<category><![CDATA[Webserver]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-mit-permalinks-den-webserver-entlasten-590/</guid>
		<description><![CDATA[Wie Wordpress Permalinks verarbeitet
Durch Permalinks bekommen Artikel und Seiten lesbare URLs und auch Struktur. Alle Artikel in der Kategorie &#8216;Wordpess&#8217; können mit schnurpsel.de/themen/wordpress/ aufgerufen werden, das Monatsarchiv für Juli 2010 mit schnurpsel.de/date/2010/07/.
Auf dem Webserver existiert aber kein Verzeichnis /themen/wordpress/ oder /date/2010/07/. Damit die Seiten trotzdem aufgerufen werden können, erstellt Wordpress eine einfache Regel für das Rewrite-Modul des Apache-Webservers:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php <a href='http://schnurpsel.de/wordpress-mit-permalinks-den-webserver-entlasten-590/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<h3>Wie Wordpress Permalinks verarbeitet</h3>
<p>Durch Permalinks bekommen Artikel und Seiten lesbare URLs und auch Struktur. Alle Artikel in der Kategorie &#8216;Wordpess&#8217; können mit <a href="http://schnurpsel.de/themen/wordpress/">schnurpsel.de/themen/wordpress/</a> aufgerufen werden, das Monatsarchiv für Juli 2010 mit <a href="http://schnurpsel.de/date/2010/07/">schnurpsel.de/date/2010/07/</a>.</p>
<p>Auf dem Webserver existiert aber kein Verzeichnis <em>/themen/wordpress/</em> oder <em>/date/2010/07/</em>. Damit die Seiten trotzdem aufgerufen werden können, erstellt Wordpress eine einfache Regel für das Rewrite-Modul des Apache-Webservers:
<pre>RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]</pre>
<p>Diese drei Zeilen führen dazu, das alles, was nicht tatsächlich als Datei oder Verzeichnis auf dem Server existiert, einfach an die <em>index.php</em> von Wordpress durchgereicht wird. Wordpress kümmert sich nun darum, ob es z.B. eine Kategorie &#8220;Wordpress&#8221; gibt, stellt die Liste mit den passenden Artikeln zusammen un gibt sie aus.</p>
<h3>Was es alles nicht gibt</h3>
<p>Im Moment sind wohl mal wieder ein paar Bots oder <a href="http://de.wikipedia.org/wiki/Skriptkiddie">Skriptkiddies</a> unterwegs, die einfach versuchen, irgendwelche php-Skripte aufzurufen, um mögliche Sicherheitslücken ausnutzen zu können. Das sieht dann etwa so aus:
<pre>/scripts/setup.php
/pma/scripts/setup.php
/phpMyAdmin/scripts/setup.php
/phpmyadmin/scripts/setup.php
/myadmin/scripts/setup.php</pre>
<p>Solche Dateien gibt es hier allerdings nicht. Auch andere Sachen können zu fehlerhaften Aufrufen führen, z.B. Standard-Icons wie <em>favicon.ico</em> oder <em>apple-touch-icon.png</em>, die manche Browser einfach aufrufen oder durch Nutzer aus der Bildersuche falsch kopierte BILd-URLs.</p>
<p>Durch die für die Permalinks notwendigen mod_rewrite-Regeln werden alle dies Aufrufe nun an Wordpress weitergeleitet. Wordpress wird geladen, stellt eine Datenbankverbingung her, klappert die internene Rewriteregeln ab um schließlich nur festzustellen, daß es mit dem Aufruf nichts anfangen kann. Dann gibt Wordpress schließlich auch nur eine Fehlerseite aus, die möglicherweise auch noch aufwändig gestaltet ist und unnötig viel Daten als Antwort zurücküberträgt.</p>
<h3>Wordpress und den Webserver entlasten</h3>
<p>Damit nun nicht Wordpress wegen jeder Kleinigkeit behelligt werden, kann man eine spezielle Regel der Wordpress-Regel vorschalten, die einfach gegebenfalls die Abarbeitung der Rewrite-Regeln beendet:</p>
<pre>&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.[^\.]+$ - [L]
&lt;/IfModule&gt;</pre>
<p>Die Idee dabei ist, daß alle Permalink-URLs normalerweise keine Dateierweiterung wie .html, .jpg oder .php haben. Falls nun eine Datei nicht existiert (RewriteCond) und diese Datei mit einem Punkt und mindestens einem weiteren Zeichen endet, wird die Abarbeitung der Regeln an dieser Stelle beendet (RewriteRule). <strong>Diese Zeilen müssen vor den Wordpress-Regeln stehen</strong>.</p>
<p>Wordpress bekommt diese Aufrufe nicht mehr zu sehen, der Fehler wird einfach vom Webserver behandelt. Hier kommt dann auch eine konfigurierte und vorhanden benutzerdefinierte Fehlerseite zu Anwendung.</p>
<p>Ich weiß, es <a href="http://forum.wordpress-deutschland.org/konfiguration/21671-html-endung.html">gibt auch Blogger</a>, die aus welchen Gründen auch immer, die Permalinks mit einem abschließenden <strong>.html</strong> konfiguriert haben. Aber auch das ist kein Problem, es muß nur eine Zeile hinzugefügt werden, welche die Regel für die Endung .html (oder eine andere) ungültig macht:</p>
<pre>&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI}	!\.html$
RewriteRule \.[^\.]+$ - [L]
&lt;/IfModule&gt;</pre>
<h3 id='ov-590'>Optimierte Version</h3>
<p>Mann kann die zusätzlichen Bedingungen auch direkt in die Wordpress-Rules einfügen. Nachteil hierbei ist aber, daß sie <strong>bei Änderungen an den Permalinkeinstellungen verloren gehen</strong>, weil Wordpress den Block zwischen <em># BEGIN WordPress</em> und <em># END WordPress</em> neu schreibt:</p>
<pre># BEGIN WordPress
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
<strong>RewriteCond %{REQUEST_URI}	!\.[^\.]+$</strong>
RewriteRule . /index.php [L]
&lt;/IfModule&gt;
# END WordPress</pre>
<p>Die Version mit Endung .html:</p>
<pre># BEGIN WordPress
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
<strong>RewriteCond %{REQUEST_URI}	!\.[^\.]+$ [OR]
RewriteCond %{REQUEST_URI}	\.html$</strong>
RewriteRule . /index.php [L]
&lt;/IfModule&gt;
# END WordPress</pre>
<h3>Plugin-Version</h3>
<p>Angeregt durch die Kommentare von Ralf habe ich nun eine Plugin-Version fertig gestellt.</p>
<p><strong>Download:</strong> <a href='http://schnurpsel.de/wp-content/uploads/2010/07/plw123_rw_error.zip'>123 Rewrite Error 0.10</a></p>
<p>Das Plugin schreibt die Regeln beim Aktivieren, Deaktivieren und bei Änderungen an der Permalinkstruktur wie bei der <a href="#ov-590">Optimierten Version</a> beschrieben automtisch mit den Wordpress-RewriteRules in die .htaccess. Dabei wird auch gleich berücksichtigt, ob in der Permalinkstruktur eine Erweiterung wie <em>.html</em> angegeben wurde.</p>
<h3>Fazit</h3>
<p>Wieviel Serverlast oder Traffic durch diese Maßnahme eingespart wird, kann ich nicht sagen. Das hängt sicher auch vom Nutzungsprofil und der Konfiguration der Website ab. Aber warum sollte man solch eine einfache Möglichkeiten auslassen, um Wordpress und dem Webserver das Leben ein bißchen leichter zu machen.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-mit-permalinks-den-webserver-entlasten-590/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>my-hacks.php wird auch in Wordpress 3.0 noch unterstützt</title>
		<link>http://schnurpsel.de/my-hacks-php-wird-auch-in-wordpress-3-0-noch-unterstuetzt-493/</link>
		<comments>http://schnurpsel.de/my-hacks-php-wird-auch-in-wordpress-3-0-noch-unterstuetzt-493/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 10:51:55 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[my-hacks]]></category>
		<category><![CDATA[Optionen]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/my-hacks-php-wird-auch-in-wordpress-3-0-noch-unterstuetzt-493/</guid>
		<description><![CDATA[Puhhh, Glück gehabt. Nachdem bereits mit Wordpress 2.8 die Option für die my-hacks.php aus dem Backend verschwunden war, hatte ich befürchtet, daß auch die Unterstützung für diese älteste Wordpress-Erweiterungs-Schnittstelle ab Wordpress 3.0 ganz unter den Tisch fallen würde.
Das scheint aber nicht der Fall zu sein, denn in WP 3.0 RC1 wird die my-hacks.php weiterhin geladen, sofern sie aktiviert ist. Damit ist gewährleistet, daß nicht <a href='http://schnurpsel.de/my-hacks-php-wird-auch-in-wordpress-3-0-noch-unterstuetzt-493/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Puhhh, Glück gehabt. Nachdem bereits mit Wordpress 2.8 die Option für die <a href='http://schnurpsel.de/das-ende-der-wordpress-hacker-145/' title='Das Ende der Wordpress-Hacker'>my-hacks.php aus dem Backend verschwunden</a> war, hatte ich befürchtet, daß auch die Unterstützung für diese älteste Wordpress-Erweiterungs-Schnittstelle ab Wordpress 3.0 ganz unter den Tisch fallen würde.</p>
<p>Das scheint aber nicht der Fall zu sein, denn in <a href="http://blog.wordpress-deutschland.org/2010/05/28/wordpress-3-0-rc1-veroeffentlicht.html">WP 3.0 RC1</a> wird die my-hacks.php weiterhin geladen, sofern sie aktiviert ist. Damit ist gewährleistet, daß nicht plötzlich nach dem Update wichtige Funktionen ausgesperrt werden, die möglicherweise in der my-hacks.php stehen.</p>
<p>Allerdings kann man nach einer Neuinstalltion <a href='http://schnurpsel.de/hackers-paradise-12/' title='Hackers Paradise'>die my-hacks-Erweiterung</a> nicht mehr im Backend aktivieren. Dafür müßte man direkt in der Datenbank rumfummeln oder man verwendet das &#8220;123 Hackfile Option&#8221;-Plugin:</p>
<p><strong>Download:</strong> <a href='http://schnurpsel.de/wp-content/uploads/2009/04/plw123_hackfile_option_0_12.zip'>Plugin 123 Hackfile Option 0.12</a></p>
<p>Die Option dafür erscheint nun allerdings nicht mehr bei Einstellungen->Verschiedenes (gibt es nicht mehr), sondern ganz am Ende von Einstellungen->Allgemein.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/my-hacks-php-wird-auch-in-wordpress-3-0-noch-unterstuetzt-493/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alles Nichts oder nicht alles?</title>
		<link>http://schnurpsel.de/alles-nichts-oder-nicht-alles-399/</link>
		<comments>http://schnurpsel.de/alles-nichts-oder-nicht-alles-399/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 21:43:16 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[my-hacks]]></category>
		<category><![CDATA[Suchmaschinen]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/alles-nichts-oder-nicht-alles-399/</guid>
		<description><![CDATA[
Wenn Besucher über Google auf die eigene Webseite kommen, ist das ja normalerweise eine schöne Sache. Allerdings nicht, wenn es über einen seltsamen Link, wie er oben zu sehen ist, passiert. Wie kommt aber soetwas überhaupt in den Index einer Suchmaschine?
Das gibts doch gar nicht
Bereits im Oktober letzen Jahres hatte ich etwas Ähnliches beobachtet. Da wurden Google massiv mit Links auf irgendwelche nicht existierende <a href='http://schnurpsel.de/alles-nichts-oder-nicht-alles-399/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2010/03/google-treffer-mit-paramete.png'><img src='http://schnurpsel.de/wp-content/uploads/2010/03/google-treffer-mit-paramete.png' alt='Google-Treffer mit Parameter' title='Google-Treffer mit Parameter' /></a></p>
<p>Wenn Besucher über Google auf die eigene Webseite kommen, ist das ja normalerweise eine schöne Sache. Allerdings nicht, wenn es über einen seltsamen Link, wie er oben zu sehen ist, passiert. Wie kommt aber soetwas überhaupt in den Index einer Suchmaschine?</p>
<h3>Das gibts doch gar nicht</h3>
<p>Bereits im Oktober letzen Jahres hatte ich <a href='http://schnurpsel.de/komischer-spam-und-der-http-statuscode-251/' title='Komischer Spam und der HTTP-Statuscode'>etwas Ähnliches</a> beobachtet. Da wurden Google massiv mit Links auf irgendwelche nicht existierende Seiten gefüttert. Wenn nun eine dieser nicht vorhandenen Seiten auf die Anfrage des Googlebots einen HTTP-Status &#8220;200 OK&#8221; zurückliefert, geht Google davon aus, daß es die Seite gibt und nimmt sie in den Index auf. Korrekterweise sollte aber mit dem Fehlerstatus &#8220;404 Not found&#8221; geantwortet werden, so daß die Seite nicht im Index landet. Genau das war damals bei mir der Fall, also ist eigentlich alles in Butter. Nur habe nicht mit der Großzügigkeit von Wordpress gerechnet.</p>
<h3>Die Wordpress.presse.pressung</h3>
<p>In manchen Dingen ist Wordpress recht großzügig. Früher war es möglich, wenn in den Permalinks die Artikel ID verwendet wurde, einen Artikel über nahezu beliebig viele URLs aufzurufen. Sobald die ID erkannt wurde und existierte, wurde der Rest der URL nicht weiter überprüft. So hätte man diesen Beitrag hier auch noch mit <em>/alles-quark-399/</em> oder <em>/blafasel-399/</em> aufrufen können. Das geht mittlwerweile nicht mehr. Allerdings ist zur Zeit etwas Ähnliches immer noch möglich, wenn man in den Permalinks <a href='http://schnurpsel.de/permalinks-was-verwenden-die-33-deutschen-top-blogs-388/#kat-url' title='Permalinks &#8211; Was verwenden die 33 deutschen Top-Blogs'>die Kategorie verwendet</a>.</p>
<p>Wenn nun eine Wordpress-Seite mit Parametern in der Form <em>/?parameter=wert</em> aufgerufen wird, ignoriert Wordpress einfach unbekannte Patemeter oder ungültige Paremeterwerte und tut so, als würde es diese Parameter gar nicht geben. Somit führen folgende Aufrufe zu gültigen Seiten:</p>
<p><a href="http://testblog.schnurpsel.de/?q=Diese%20Seite%20gibt%20es%20nicht">http://testblog.schnurpsel.de/?q=Diese Seite gibt es nicht</a><br />
<a href="http://testblog.schnurpsel.de/?quark=Gesund%20und%20schmeckt%20lecker">http://testblog.schnurpsel.de/?quark=Gesund und schmeckt lecker</a><br />
<a href="http://testblog.schnurpsel.de/?p=Hier%20steht%20normalerweise%20die%20ID">http://testblog.schnurpsel.de/?p=Hier steht normalerweise die ID</a></p>
<p>Bei den ersten beiden Beispielen wir ein unbekannter Paremeter verwendet, im dritten Beispiel der gültige Parameter <em>p=</em> (<a href='http://schnurpsel.de/shortlink-ist-schon-eingebaut-163/' title='Shortlink ist schon eingebaut'>Short-Link</a>), der allerdings eine numerische Artikel-ID erwartet. In allen Fällen wird die Startseite mit dem Status &#8220;200 OK&#8221; angezeigt. Es funktioniert aber ebenso mit Einzelseiten oder anderen Permalinks:</p>
<p><a href="http://testblog.schnurpsel.de/allgemein/hallo-welt/?frage=was-soll-das">http://testblog.schnurpsel.de/...hallo-welt/?frage=was-soll-das</a><br />
<a href="http://testblog.schnurpsel.de/2010/03/?jahreszeit=fr%FChling">http://testblog.schnurpsel.de/2010/03/?jahreszeit=Frühling</a></p>
<h3>Gut oder schlecht</h3>
<p>Ob dieses Verhalten von Wordpress nun gut oder schlecht, gewollt oder ein Fehler ist, mag ich nicht beurteilen. Ich finde es zumindest suboptimal, denn dadurch entstehet z.B. die oben gezeigte URL als <a href="http://www.google.de/search?q=save+us+from+berlusconi">Google-Treffer</a>, und sowas möchte ich nicht haben. Dabei wäre es für Wordpress kein größeres Problem, unbekannte Parameter oder ungültige Parameterwerte als Fehler zu behandeln. Das schöne an Wordpress ist ja, daß es recht einfach erweitert und modifiziert werde kann.</p>
<h3>Fehler bleibt Fehler</h3>
<p>Deshalb habe ich mir diese Parameterprüfung hier nachgerüstet (aber nicht für den Testblog!), übrigens auch für die worpdresseigene Suchfunktion. Denn falls es keinen Suchtreffer gibt, finde ich, ist das auch einen &#8220;404 Not Found&#8221; wert :-)<br />
Nun sollte auch die ganz oben gezeigte, hier nicht existierende Seite nach einiger Zeit aus dem Suchindex verschwinden.</p>
<p><strong>Nachtrag:</strong><br />
Weil es angefragt wurde, hier mein Code zur Parameterprüfung, der sich per Action-Hook in <strong>parse_request</strong> reinhängt:</p>
<pre>&lt;?php
 function plw123_parse_request( $data ) {
  // Liste der numerischen Parameter
  $num_para = array( 'p', 'page_id', 'attachment_id', 'tag_id',
          'page', 'paged',
          'year', 'monthnum', 'day', 'w', 'm',
          'hour', 'minute', 'second' );
  // Parameter übergeben, aber nicht gefunden
  foreach( $_GET as $key =&gt; $value )
   if( !array_key_exists( $key, $data-&gt;query_vars ) ) {
    $data-&gt;query_vars['error'] = '404';
    return;
   }
  // Numerische Parameter prüfen
  foreach( $data-&gt;query_vars as $key =&gt; $value ) {
   // Sonderbehandlung Kategorie-IDs
   if( 'cat' == $key ) {
    // darf eine Liste von kommaseparierten Integerwerten sein
    $test_value = preg_replace( '|[^0-9,-]|', '', $value );
    if( $test_value != $value ) {
     $data-&gt;query_vars['error'] = '404';
     return;
    }
   }
   // Numerische Werte
   if( in_array( $key, $num_para ) ) {
    $value = trim( $value );
    // Page bei Einzelansicht (Seite, Artikel) kann führenden Slash enthalten
    if( 'page' == $key )
      $value = ltrim( $value, '/' );
    $test_value = absint( $value );
    if( !$test_value ) {
     $data-&gt;query_vars['error'] = '404';
     return;
    }
   }
  }
 }
 add_action( 'parse_request', 'plw123_parse_request' );
?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/alles-nichts-oder-nicht-alles-399/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Höher, schneller, weiter</title>
		<link>http://schnurpsel.de/hoeher-schneller-weiter-390/</link>
		<comments>http://schnurpsel.de/hoeher-schneller-weiter-390/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:28:39 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Geschwindigkeit]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Strato]]></category>
		<category><![CDATA[Webhosting]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/hoeher-schneller-weiter-390/</guid>
		<description><![CDATA[Mit den Google-Webmastertools bekommt man einen guten Überblick, wie oft der Googlebot vorbeischaut und wieviele Daten er in welcher Zeit Abfragt.
Pro Tag gecrawlte Seiten

Auf dem Diagramm ist noch das Ende vom November, der ganze Dezember und Januar und der Anfang vom Februar zu sehen. Scheinbar tritt der Googlebot auch über den Jahreswechsel etwas kürzer, feiert Weihnachten und Silvester und legt dann erst Mitte Januar <a href='http://schnurpsel.de/hoeher-schneller-weiter-390/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Mit den <a href="http://www.google.com/webmasters/tools/?hl=de">Google-Webmastertools</a> bekommt man einen guten Überblick, wie oft der Googlebot vorbeischaut und wieviele Daten er in welcher Zeit Abfragt.</p>
<h3>Pro Tag gecrawlte Seiten</h3>
<p><a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2010/03/google-crawling-seiten-feb-2010.png'><img src='http://schnurpsel.de/wp-content/uploads/2010/03/google-crawling-seiten-feb-2010.png' alt='Google - Crawling Anzahl der Seiten pro Tag Februar 2010' title='Google - Crawling Anzahl der Seiten pro Tag Februar 2010' /></a><br />
Auf dem Diagramm ist noch das Ende vom November, der ganze Dezember und Januar und der Anfang vom Februar zu sehen. Scheinbar tritt der Googlebot auch über den Jahreswechsel etwas kürzer, feiert Weihnachten und Silvester und legt dann erst Mitte Januar wieder richtig los.</p>
<h3>Pro Tag heruntergeladene Kilobyte</h3>
<p><a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2010/03/google-crawling-kb-feb-2010.png'><img src='http://schnurpsel.de/wp-content/uploads/2010/03/google-crawling-kb-feb-2010.png' alt='Google - Crawling Datenmenge in kByte pro Tag Februar 2010' title='Google - Crawling Datenmenge in kByte pro Tag Februar 2010' /></a><br />
In etwa parallel dazu verläuft normlerweise die Kurve zu den täglich heruntergeladenen Datenmengen. Klar, je mehr Seiten angefragt werden, um so mehr Daten fallen da durchschnittlich an.</p>
<p>Eines fällt aber auf, denn obwohl die Anzahl der pro Tag abgefragten Seiten ab Mitte Januar und im Februar höher liegen als noch im November, ist die Datenmenge nicht in gleichem Maße angestiegen. Der Grund ist recht einfach. Ich hatte Anfang/Mitte Dezember die gzip-Komprimierung für die Seiten aktiviert.</p>
<h3>Dauer des Herunterladens einer Seite (in Millisekunden)</h3>
<p><a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2010/03/google-crawling-ms-feb-2010.png'><img src='http://schnurpsel.de/wp-content/uploads/2010/03/google-crawling-ms-feb-2010.png' alt='Google - Crawling Zeit in Millisekunden pro Seite Februar 2010' title='Google - Crawling Zeit in Millisekunden pro Seite Februar 2010' /></a><br />
Die Geschwindigkeit der Seitenauslieferung ist die für den normalen Nutzer, also den Besucher einer Website der wohl wichtigste, technische Wert. Wenn erstmal ein paar Sekunden nach dem Aufrufen einer Seite oder länger nichts passiert, ist das aus Anwendersicht eher unerfreulich.</p>
<p>Der Wert lag im November bei etwa 1,5 Sekunden und schließt damit an die <a href='http://schnurpsel.de/geschwindigkeit-ist-keine-hexerei-213/' title='Geschwindigkeit ist keine Hexerei'>Zahlen vom Oktober</a> an. Anfang Dezember bin ich dann Dank <a href='http://schnurpsel.de/speedplus-strato-macht-php-anwendungen-schneller-276/' title='SpeedPlus &#8211; Strato macht PHP-Anwendungen schneller'>SpeedPlus</a> wieder <a href='http://schnurpsel.de/strato-powerplus-mit-speedplus-fehler-bei-der-remote-adresse-remote_addr-284/' title='Strato PowerPlus mit SpeedPlus &#8211; Fehler bei der Remote-Adresse (REMOTE_ADDR)'>zu Strato zurückgekehrt</a> und seitdem liegen die Ladezeiten fast immer bei erfreulichen 0,8 Sekunden. Aber eben nur fast. Wie man im Diagramm sieht, gab es schon im Dezember und Anfang Januar Ladezeitspitzen, die dann im Februar nochmal deutlich zunahmen. Allerdings ist das eher darin zu sehen, daß durch die größere Anzahl der pro Tag abgefragten Seiten auch die Wahrscheinlichkeit für den Googlebots auf eine Lastspitze zu treffen, größer war.</p>
<p>Ungeachtet dessen gibt es aber diese Lastspitzen, die nicht nur der Googlebot &#8220;sieht&#8221;, sondern auch der normale Nutzer bemerkt. Wenn man Pech hat, dauert das Laden einer Seite wieder 4 bis 6 Sekunden, ganz so wie vor der SpeedPlus-Zeit bei Strato. Diesmal ist es aber meiner Meinung nach nicht die <a href='http://schnurpsel.de/warum-wordpress-bei-strato-so-langsam-ist-161/' title='Warum Wordpress bei Strato so langsam ist'>schlechte PHP-Performance</a>, sondern eher die Datenbank. Die Datenbankserver sind zwar grundsätzlich nicht wirklich lahm, legen aber ab und zu ein paar Gedenkminuten ein, wie mir scheint. Und genau dann dauert der Seitenaufruf wieder mehrere Sekunden. Kürzlich gab es auch wieder mal einen Totalausfall, der dann zu einem 500er Fehler führt.</p>
<h3>Hin und weg</h3>
<p>Nun sind zwar PHP und Webserver bei Strato schnell, aber die Datenbank klemmt mitunter. Deshalb bin ich vorerst wieder zu meiner externen Datenbank zurückgekehrt. Das eigentlich langsame ist hierbei die Datenübertragung über das Internet  zwischen Strato (Karlsruhe/Berlin) und Host-Europe (Köln). Um das etwas abzudämpfen, habe ich zusätzlich ein Datenbank-Cache-Plugin installiert, welches häufig benötigte Daten auf dem Webspace bei Strato im Dateisystem ablegt, um diese nicht jedesmal neu übertragen zu müssen. Zumal sich viele Daten, z.B. die Artikel und Seiten normalerweise eh nicht ändern.</p>
<p>Nun werde ich das Alles mal weiter beobachten, wie das mit den Ladezeiten so aussieht und hoffe aber trotzdem, das Strato die Datenbankaussetzer in den Griff bekommt.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/hoeher-schneller-weiter-390/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Permalinks &#8211; Was verwenden die 33 deutschen Top-Blogs</title>
		<link>http://schnurpsel.de/permalinks-was-verwenden-die-33-deutschen-top-blogs-388/</link>
		<comments>http://schnurpsel.de/permalinks-was-verwenden-die-33-deutschen-top-blogs-388/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 15:02:18 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Permalink]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/permalinks-was-verwenden-die-33-deutschen-top-blogs-388/</guid>
		<description><![CDATA[Welcher Permalink ist das beste Ding?
Die Diskussion taucht immer wieder mal auf, wie sieht optimalerweise ein Permalink, also die Struktur der URL aus. Sollten das Datum oder die Artikel-ID enthalten sein, ist es sinnvoll Kategorien oder Tags mit aufzunehmen?
Eine allgemeingültige und endgültige Empfehlung kann es nicht geben, wenn man die unterschiedlichen Sichtweisen dazu berücksichtigt, die dann zu eher widersprüchliche Aussagen führen.
Betreibt man ein Blog <a href='http://schnurpsel.de/permalinks-was-verwenden-die-33-deutschen-top-blogs-388/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<h3>Welcher Permalink ist das beste Ding?</h3>
<p>Die Diskussion <a href="http://www.perun.net/2010/02/16/die-richtige-permalinkstruktur/">taucht</a> immer <a href="http://toscho.de/2009/beste-url-struktur/">wieder</a> mal auf, wie sieht optimalerweise ein Permalink, also die Struktur der URL aus. Sollten das Datum oder die Artikel-ID enthalten sein, ist es sinnvoll Kategorien oder Tags mit aufzunehmen?</p>
<p>Eine allgemeingültige und endgültige Empfehlung kann es nicht geben, wenn man die unterschiedlichen Sichtweisen dazu berücksichtigt, die dann zu eher widersprüchliche Aussagen führen.</p>
<p>Betreibt man ein Blog im Sinne eines Tagebuches, ist sicher das Datum oder Bestandteile davon eine gute Wahl. Aus SEO-Gesichtspunkten bzw. für eine eher thematische Ausrichtung wird oft die Kategorie mit in die Permalinkstruktur aufgenommen. Für eine Webseite mit vielen Schreibern könnte auch der Autorenname eine geeignete Option sein.</p>
<p>Ich habe mir einfach mal die Permalink-Struktur der 33 deutschen Top-Blogs angesehen. Vielleicht läßt sich ja daraus eine Empfehlung ableiten.</p>
<h3>Die Permalink-Struktur der 33 deutschen Top-Blogs</h3>
<p>Zunächst stellt sich natürlich die Frage, welche sind denn die Top-Blogs in Deutschland? Auch hier kann man sich endlos streiten, wenn man will. Ich habe als erste Näherung einfach die aktuell <a href="http://zusammen.gerech.net/top-33/2010-02-24/">zusammengerechnete Liste</a> von heute, dem 24.02.2010, genommen. Die Permalinkstruktur habe ich in Gruppen zusammengefaßt, vor dem jeweiligen Blog steht der aktuelle Platz in der Top-33-Liste :</p>
<ul>
<li><strong>Jahr, Monat, Tag und Artikelname</strong> (13)
<ul>
<li> 2. <a href='http://netzwertig.com/'>netzwertig.com</a></li>
<li> 3. <a href='http://www.nerdcore.de/wp/'>Nerdcore</a></li>
<li> 4. <a href='http://www.basicthinking.de/blog/'>Basic Thinking Blog</a></li>
<li>10. <a href='http://www.spreeblick.com/'>Spreeblick</a></li>
<li>12. <a href='http://www.werbeblogger.de/'>Werbeblogger</a></li>
<li>13. <a href='http://www.googlewatchblog.de/'>GoogleWatchBlog</a></li>
<li>18. <a href='http://www.fuenf-filmfreunde.de/'>Die Fünf Filmfreunde</a></li>
<li>19. <a href='http://faz-community.faz.net/blogs/netzkonom/default.aspx'>Netzökonom</a> (vorangstelltes &#8216;archive&#8217;)</li>
<li>22. <a href='http://blog.wordpress-deutschland.org/'>WordPress Deutschland Blog</a></li>
<li>23. <a href='http://lumma.de/'>Lummaland</a></li>
<li>25. <a href='http://www.macnotes.de/'>MACNOTES.DE</a></li>
<li>29. <a href='http://www.lawblog.de/'>law blog</a> (vorangstelltes &#8216;archives&#8217;)</li>
<li>32. <a href='http://www.allesaussersport.de/'>allesaussersport</a> (vorangstelltes &#8216;archiv&#8217;)</li>
</ul>
</li>
<li><strong>Jahr, Monat und Artikelname</strong> (5)
<ul>
<li>11. <a href='http://www.internet-law.de/'>Internet-Law</a></li>
<li>15. <a href='http://www.lesmads.de/'>Les Mads</a></li>
<li>17. <a href='http://www.fscklog.com/'>fscklog</a></li>
<li>24. <a href='http://www.indiskretionehrensache.de/'>Indiskretion Ehrensache</a></li>
<li>27. <a href='http://alles-schallundrauch.blogspot.com/'>Alles Schall und Rauch</a></li>
</ul>
</li>
<li><strong>Jahr und Artikelname</strong> (1)
<ul>
<li> 6. <a href='http://www.netzpolitik.org/'>netzpolitik.org</a></li>
</ul>
</li>
<li><strong>Artikelname</strong> (6)
<ul>
<li> 1. <a href='http://www.stefan-niggemeier.de/blog/'>Stefan Niggemeier</a></li>
<li> 8. <a href='http://stadt-bremerhaven.de/'>Caschys Blog</a></li>
<li>16. <a href='http://www.ruhrbarone.de/'>Ruhrbarone</a></li>
<li>30. <a href='http://kochtopf.twoday.net/'>1x umrühren bitte</a> (vorangstelltes &#8217;stories&#8217;)</li>
<li>31. <a href='http://www.designtagebuch.de/'>Design Tagebuch</a></li>
<li>33. <a href='http://blog.druckerei.de/'>Druckerei Blog</a></li>
</ul>
</li>
<li><strong>Nummer und Artikelname</strong> (3)
<ul>
<li> 7. <a href='http://carta.info/'>CARTA</a></li>
<li> 9. <a href='http://www.bildblog.de/'>BILDblog</a></li>
<li>20. <a href='http://upload-magazin.de/'>UPLOAD Blog</a></li>
</ul>
</li>
<li><strong>Artikelname und Nummer</strong> (1)
<ul>
<li> 5. <a href='http://stylespion.de/'>StyleSpion</a></li>
</ul>
</li>
<li><strong>Sonderformen</strong> (1)
<ul>
<li>28. <a href='http://www.elektrischer-reporter.de/'>Elektrischer Reporter</a> Kategorie (video) ? und Nummer</li>
</ul>
</li>
<li><strong>Keine Permalink, Nummer als URL-Parameter</strong> (3)
<ul>
<li>14. <a href='http://www.nachdenkseiten.de/'>NachDenkSeiten</a></li>
<li>21. <a href='http://www.whudat.de/'>MC Winkels weBlog</a></li>
<li>26. <a href='http://blog.fefe.de/'>Fefes Blog</a></li>
</ul>
</li>
</ul>
<p>Mehr als die Hälfte (57,6%) der Top-33-Blogs verwendet neben dem Artikelnamen das Datum oder einen Bestandteil davon in der URL. Bei allein fast 40% findet man das komplette Datum mit Jahr, Monat und Tag im Permalink. Gut 18% benutzen nur den Namen des Artikels als Permalink und weitere etwa 12% kombinieren dazu noch eine Nummer (Artikel-ID). Immerhin knapp 10% der Top-Blogs verwenden keine Permalinks, sondern setzen auf die Artikelnummer als URL-Parameter (?id=1234).</p>
<h3>Erste Ableitung des Permalink-Aufbaus</h3>
<p>Wenn man Permalinks verwendet, ist der Artikelname (in seiner Umwandlung zu einem URL-Pfad) gewissermaßen eine feste Größe. Die Einbeziehung des Datums oder von Teilen kann so schlecht nicht sein, diese Verwendet ein Großteil der Top-Blogs. Auch ganz auf Permalinks zu verzichten, hat gewisse Vorteile. Die URLs sind kurz und bleiben immer gültig, auch wenn man mal was am Artikel-Titel, dem Datum oder sonstigen Einflußfaktoren ändert.</p>
<p>Ich habe mir stichprobenartig noch weitere <a href="http://zusammen.gerech.net/">Blogs der Top-100</a> angesehen und zumindest keine Seite entdeckt, die etwa die Kategorie oder gar Tags in der URL verwendet. Mal davon abgesehen, daß Tags bei Wordpress bis zur Version 2.9.x nicht als Bestandteil der Permalinks funktionieren (obwohl in der Dokumentation genannt), gibt es auch noch andere Probleme.</p>
<h3 id='kat-url'>Kategorie oder Tag im Permalink</h3>
<p>In Wordpress kann man Artikel in mehreren Kategorien ablegen. Einem Artikel können zudem auch mehrere Tags zugeordnet werden. Verwendet man Kategorien oder Tags in Permalinks, erstellt Wordpress die die URL aus der Kategorie oder dem Tag mit der kleinsten ID. Ändert man nun die Kategoriezuordnung oder die Tags, kann sich möglicherweise auch die URL ändern.</p>
<p>Das ist aber erstmal nicht weiter schlimm, denn der Artikel wird auch weiterhin mit der alten Kategorie gefunden und angezeigt. Wordpress geht sogar soweit, einfach die Kategorie beim Auflösen der Permalinks zu ignorieren. Damit ergeben sich dann theoretisch <strong>beliebig viele URLs für einen Artikel</strong>.</p>
<p>Als Beispiel ist das auf meinem Testblog zu sehen. Die Permalink-Struktur sieht so aus:</p>
<pre>/%category%/%postname%/</pre>
<p>Der Artikel ist in der Kategorie &#8220;Allgemein&#8221; einsortiert, die URL sieht so aus:<br />
<a href="http://testblog.schnurpsel.de/allgemein/hallo-welt/">http://testblog.schnurpsel.de/allgemein/hallo-welt/</a></p>
<p>Er ist aber auch mit der Kategorie &#8220;Blafasel&#8221;, &#8220;Hundekuchen&#8221; oder &#8220;Gibtesnicht&#8221; aufrufbar:<br />
<a href="http://testblog.schnurpsel.de/blafasel/hallo-welt/">http://testblog.schnurpsel.de/blafasel/hallo-welt/</a><br />
<a href="http://testblog.schnurpsel.de/hundekuchen/hallo-welt/">http://testblog.schnurpsel.de/hundekuchen/hallo-welt/</a><br />
<a href="http://testblog.schnurpsel.de/gibtesnicht/hallo-welt/">http://testblog.schnurpsel.de/gibtesnicht/hallo-welt/</a><br />
Genau, diese Kategorien gibt es gar nicht.</p>
<p>Man hat damit potentiell also ganz viel bösen &#8220;Duplicate content&#8221; (DC). Da sage noch einer, die Kategorie im Permalink sei unter SEO-Gesichtspunkten empfehlenswert. ;-)</p>
<h3>Permalink, so oder so</h3>
<p>Letztendlich muß jeder selbst entscheiden, ob und wie er seine Permalinks gestaltet. Bei Putzlowitsch habe ich mich für das Datum entschieden, da ich dort eher im Sinne eines Tagebuchs schreibe. Hier verwende ich eine Kombination aus Artikelname und Artikel-ID, weil die sichtbare ID schnelle interne Links mit dem 123 IntLink-Plugin ermöglicht. Bei Twitter verwende ich übrigens gerne die <a href='http://schnurpsel.de/shortlink-ist-schon-eingebaut-163/' title='Shortlink ist schon eingebaut'>WP-Shortlinks</a> mit der ID als URL-Parameter, die sind schön kurz und funktionieren auch ohne Shortlink-Dienst. </p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/permalinks-was-verwenden-die-33-deutschen-top-blogs-388/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mit welcher Wordpress-Version läuft ein Wordpress-Blog?</title>
		<link>http://schnurpsel.de/mit-welcher-wordpress-version-laeuft-eine-wordpress-blog-359/</link>
		<comments>http://schnurpsel.de/mit-welcher-wordpress-version-laeuft-eine-wordpress-blog-359/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 22:56:27 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Version]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/mit-welcher-wordpress-version-laeuft-eine-wordpress-blog-359/</guid>
		<description><![CDATA[Wordpress habe ich seit Oktober 2006 in Benutzung (1&#038;1 Fertigblog), mein erstes selbstinstalliertes Wordpress im November 2006 hatte die Version 2.0.4. Seitdem ist einige Zeit ins Land gegangen und mittlerweile sind wir bei Wordpress Version 2.9.1 angekommen, die Version 3.0 ist schon angekündigt und soll im März erscheinen.
Mit jeder neuen Wordpress-Version gab es meist neue Funktionen, manchmal war eine neue Ausgabe aber auch nur <a href='http://schnurpsel.de/mit-welcher-wordpress-version-laeuft-eine-wordpress-blog-359/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Wordpress habe ich <a href="http://putzlowitsch.de/2006/10/19/zufall-und-notwendigkeit/">seit Oktober 2006</a> in Benutzung (1&#038;1 Fertigblog), mein erstes selbstinstalliertes <a href="http://putzlowitsch.de/2006/11/07/umzug/">Wordpress im November 2006</a> hatte die Version 2.0.4. Seitdem ist einige Zeit ins Land gegangen und mittlerweile sind wir bei Wordpress Version 2.9.1 angekommen, die Version 3.0 ist schon angekündigt und soll im März erscheinen.</p>
<p>Mit jeder neuen Wordpress-Version gab es meist neue Funktionen, manchmal war eine neue Ausgabe aber auch nur ein Sicherheits-Release, um bekannt gewordene Sicherheitslöcher zu stopfen. Damit sind Sicherheitslücken und deren Ausnutzbarkeit immer von der Wordpress-Version abhängig, wodurch die Versions-Information für einen Angreifer durchaus interessant ist.</p>
<h3>Die Wordpress-Versionsnummer anzeigen</h3>
<p>Wordpress liefert in der Standardinstallation die Versionsinformationen gleich an drei Stellen mit. Zwar sind diese für den normalen Besucher üblicherweise nicht sichtbar, aber in der Seite vorhanden.</p>
<p><strong>Im Header der Seite</strong><br />
Wen man sich den HTML-Quelltext einer Seite ansieht, findet man dort möglicherweise im Header einen Eintrag wie <em>&lt;meta name=&#8221;generator&#8221; content=&#8221;WordPress 2.9.1&#8243; /&gt;</em><br />
<a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2010/02/wp-version-header.png'><img src='http://schnurpsel.de/wp-content/uploads/2010/02/wp-version-header.png' alt='Wordpress-Version im Header der Seite' title='Wordpress-Version im Header der Seite' /></a></p>
<p><strong>Im Feed</strong><br />
Wen man sich den XML-Quelltext eines Feeds (RSS, Atom) ansieht, findet man dort möglicherweise am Anfang (channel) einen Eintrag wie <em>&lt;generator&gt;http://wordpress.org/?v=2.9.1&lt;/generator&gt;<br />
</em><br />
<a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2010/02/wp-version-feed.png'><img src='http://schnurpsel.de/wp-content/uploads/2010/02/wp-version-feed.png' alt='Wordpress-Version im Feed' title='Wordpress-Version im Feed' /></a></p>
<p><strong>In der readme.html</strong><br />
Mit jeder Wordpress-Version wird eine Datei <em>readme.html</em> und in der deutschen Version auch <em>liesmich.html</em> mitgeliefert bzw. installiert. Diese findet man im Wordpress-Wurzelverzeichnis. Da steht die Wordpress-Version ebenso drin:<br />
<a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2010/02/wp-version-readme.png'><img src='http://schnurpsel.de/wp-content/uploads/2010/02/wp-version-readme.png' alt='Wordpress-Version in der readme.html' title='Wordpress-Version in der readme.html' /></a></p>
<h3>Wordpress-Version verbergen</h3>
<p>Man mag darüber streiten, ob es sinnvoll ist, die Versionsnummer vor Bots oder wem auch immer zu verbergen. Für die Unterdrückung der Ausgabe in den Seiten und Feeds gibt es <a href="http://bueltge.de/wordpress-version-verschleiern-plugin/602/">diverse</a> <a href="http://playground.ebiene.de/2310/wordpress-version-entfernen/">Lösungen</a>. Wenn man nun aber so großen Wert darauf legt, die WP-Version zu verstecken, sollte man unbedingt auch die readme.html (liesmich.html) löschen. Aber Achtung, beim nächtens (automatischen) Update ist sie wieder da.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/mit-welcher-wordpress-version-laeuft-eine-wordpress-blog-359/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress für statische Seiten optimieren</title>
		<link>http://schnurpsel.de/wordpress-fuer-statische-seiten-optimieren-305/</link>
		<comments>http://schnurpsel.de/wordpress-fuer-statische-seiten-optimieren-305/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 17:21:07 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Geschwindigkeit]]></category>
		<category><![CDATA[Optionen]]></category>
		<category><![CDATA[Permalink]]></category>
		<category><![CDATA[Seiten]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-fuer-statische-seiten-optimieren-305/</guid>
		<description><![CDATA[Wordpress und Permalinks
In Wordpress kann man für schönere URLs die Permalinks aktivieren. Diese werden nur für die Struktur der Artikel-URL festgelegt, zusätzlich kann ein Präfix für Kategorien und Tags vorgegeben werden, für Seiten jedoch gibt es keine extra Einstellmöglichkeit.
Für Artikle steht eine Vielzahl von von Platzhaltern (Variablen) zur Verfügung, die bei Zusammensetzen der URL durch die jeweiligen Daten des konkreten Artikels ersetzt werden.
Auch wenn <a href='http://schnurpsel.de/wordpress-fuer-statische-seiten-optimieren-305/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<h3>Wordpress und Permalinks</h3>
<p>In Wordpress kann man für schönere URLs die Permalinks aktivieren. Diese werden nur für die Struktur der Artikel-URL festgelegt, zusätzlich kann ein Präfix für Kategorien und Tags vorgegeben werden, für Seiten jedoch gibt es keine extra Einstellmöglichkeit.</p>
<p>Für Artikle steht eine <a href="http://codex.wordpress.org/Using_Permalinks">Vielzahl von von Platzhaltern</a> (Variablen) zur Verfügung, die bei Zusammensetzen der URL durch die jeweiligen Daten des konkreten Artikels ersetzt werden.</p>
<p>Auch wenn man Permalinks nur für die Artikle wirklich konfigurieren kann, wirken sich die dort gewählten Optionen auch auf die Seiten und andere URLs in Wordpress aus. Einen sichtbaren Effekt hat die Entscheidung, ob man die Permalinks mit einem Schrägstrich abschließt oder nicht. Entsprechend erhalten auch alle anderen von Wordpress generierten URLs diesen Schrägstrich oder nicht. Das gilt übrigens nur für den Schrägstrich (Slash), alle anderen Endungen wie z.B. <em>.html</em> werden dabei nicht übernommen.</p>
<h3>Wordpress und Rewrite-Rules</h3>
<p>Damit Wordpress die Permalinks wieder in konkrete Artikel- und Seiten-IDs auflösen kann, wird eine Liste von Regeln (RewriteRules) erstellt, die sequentiell abgearbeitet wird. Mit dem ersten passenden Treffer wird dann die Datenbankabfrage für einen Artikel oder eine Seite, für eine Kategorie- oder Tagübersicht oder einen Feed usw. erstellt.</p>
<p>Wie diese interne Liste aussieht hängt unter anderem auch davon ab, welche Struktur für die Artikel bei der Permalinkkonfiguration gewählt wird. Wordpress muß Artikel von Seiten eindeutig unterscheiden können und das funktioniert nur, wenn die Permalinks als ersten Platzhalter keinen variablen Wert wie Postname (%postnam%), Kategorie (%category%), Tag (%tag%) oder Autor (%author%)  enthalten. Andernfalls werden für jede statische Seite jeweils 11 Einträge in der Liste der RewriteRules erstellt, die so aussehen:</p>
<pre>[seite-1/attachment/([^/]+)/?$] => index.php?attachment=$matches[1]
[seite-1/attachment/([^/]+)/trackback/?$] => index.php?attachment=$matches[1]&#038;tb=1
[seite-1/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&#038;feed=$matches[2]
[seite-1/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&#038;feed=$matches[2]
[seite-1/attachment/([^/]+)/comment-page-([0-9]{1,})/?$] => index.php?attachment=$matches[1]&#038;cpage=$matches[2]
[(seite-1)/trackback/?$] => index.php?pagename=$matches[1]&#038;tb=1
[(seite-1)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?pagename=$matches[1]&#038;feed=$matches[2]
[(seite-1)/(feed|rdf|rss|rss2|atom)/?$] => index.php?pagename=$matches[1]&#038;feed=$matches[2]
[(seite-1)/page/?([0-9]{1,})/?$] => index.php?pagename=$matches[1]&#038;paged=$matches[2]
[(seite-1)/comment-page-([0-9]{1,})/?$] => index.php?pagename=$matches[1]&#038;cpage=$matches[2]
[(seite-1)(/[0-9]+)?/?$] => index.php?pagename=$matches[1]&#038;page=$matches[2]
</pre>
<p>Das mag bei wenigen Seiten zwar kaum ins Gewicht fallen, bei hunderten oder gar tausenden Seiten aber schon. Einerseits belegen diese vielen Regeln Speicher, andererseits müssen sie jedesmal abgearbeitet werden, bei z.B. 300 Seiten mehr als 3300 Listeneinträge. <a href="http://forum.wordpress-deutschland.org/allgemeines/62579-seiten-langsam-artikel-schnell.html">Probleme kann es auch beim Anlegen und Ändern von Seiten geben</a>, denn die Liste muß dann jedesmal neu erstellt werden.</p>
<h3>Permalinks für statische Seiten optimieren</h3>
<p>Wenn man viele statische Seiten verwendet oder vielleicht gar keine Artikel (Wordpress als CMS), sollte man als <strong>ersten Platzhalter</strong> (Strukturtag) in den Permalinks einen <strong>numerischen Wert</strong> wie Datum (year,monthnum,day), Zeit (hour,minute,second) oder die ID (post_id) verwenden. Die von Wordpress zur Auswahl angebotenen Möglichkeiten erfüllen diese Bedingungen:</p>
<table style='font-size:1.4em;'>
<tr>
<td>Tag und Name: </td>
<td><strong>/%year%/%monthnum%/%day%/%postname%/</strong></td>
</tr>
<tr>
<td>Monat und Name: </td>
<td><strong>/%year%/%monthnum%/%postname%/</strong></td>
</tr>
<tr>
<td>Numerisch: </td>
<td><strong>/archives/%post_id%</strong></td>
</tr>
</table>
<p>Für Benutzerdefinierte Einstellungen wären z.B. <strong>/%post_id%-%postname%/</strong> geeignet. Es darf auch ein fester Text vor dem ersten numerischen Wert stehen, also z.B. <strong>/news/%post_id%-%postname%/</strong>.</p>
<p>Mit diesen Permalinkeinstellungen werden keine extra Rules je Seite erzeugt, das spart zumindest bei Wordpressinstallationen mit sehr vielen statischen Seiten Speicherplatz und Abarbeitungszeit.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-fuer-statische-seiten-optimieren-305/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wordpress beim 1&amp;1 Webhosting (1&amp;1 Homepage)</title>
		<link>http://schnurpsel.de/wordpress-beim-11-webhosting-11-homepage-220/</link>
		<comments>http://schnurpsel.de/wordpress-beim-11-webhosting-11-homepage-220/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 07:51:21 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Installation]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[1&1]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-beim-11-webhosting-11-homepage-220/</guid>
		<description><![CDATA[In den aktuellen 1&#38;1 Webhosting-Paketen &#8220;1&#38;1 Homepage Perfect&#8221;,  &#8220;1&#38;1 Homepage Business&#8221; und  &#8220;1&#38;1 Homepage Business Pro&#8221; hat man neben der Nutzung eines 1&#38;1-Fertigblogs auch die Möglichkeit, ein eigenes Wordpress zu installieren. Mindestens eine MySQL-Datenbank und PHP können in diesen Hostingpaketen genutzt werden.
Damit das selbstinstallierten Wordpress auch ordentlich funktioniert, sind einige Dinge zu beachten, die ich nachfolgend erkläre. In vielen Fällen verweise ich <a href='http://schnurpsel.de/wordpress-beim-11-webhosting-11-homepage-220/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>In den aktuellen <a href="http://www.1und1.info/xml/order/WebHosting">1&amp;1 Webhosting-Paketen</a> &#8220;1&amp;1 Homepage Perfect&#8221;,  &#8220;1&amp;1 Homepage Business&#8221; und  &#8220;1&amp;1 Homepage Business Pro&#8221; hat man neben der Nutzung eines 1&amp;1-Fertigblogs auch die Möglichkeit, ein eigenes Wordpress zu installieren. Mindestens eine MySQL-Datenbank und PHP können in diesen Hostingpaketen genutzt werden.</p>
<p>Damit das selbstinstallierten Wordpress auch ordentlich funktioniert, sind einige Dinge zu beachten, die ich nachfolgend erkläre. In vielen Fällen verweise ich auf die 1&amp;1-FAQ, da dort einzelne Schritte gut beschrieben sind.</p>
<h3>Vorbereitung der Installation &#8211; Datenbank</h3>
<p>Zunächst muß, falls nicht schon geschehen, eine neue MySQL 5 <a href="http://hilfe-center.1und1.de/hosting/scripte_datenbanken/datenbanken/1.html">Datenbank angelegt</a> werden. Wichtig sind hier die Daten, welche später in die Datei <em>wp-config.php</em> eingetragen werden müssen (Beispiele):</p>
<pre>define('DB_NAME', 'db123456789');
define('DB_USER', 'dbo123456789')
define('DB_PASSWORD', 'rh473256');
define('DB_HOST', 'db1234.1und1.de');</pre>
<p>Auf den ersten Blick sehen DB_NAME und DB_USER gleich aus, sind sie aber nicht. Beim User steht zwischen &#8216;db&#8217; und der Zahl ein kleines <strong>o</strong> (für Owner?). Zudem ist der Datenbank-Host eben nicht &#8216;localhost&#8217;, sondern der nach dem Anlegen der Datenbank in der Übersicht angezeigte dbxxxx.1und1.de.</p>
<h3>Vorbereitung der Installation &#8211; Wordpress-Installationspaket</h3>
<p>Die aktuelle deutsche Wordpress-Version kann man sich <a href="http://wordpress-deutschland.org/download/deutsch/">hier</a> herunterladen. In der <a href="http://doku.wordpress-deutschland.org/5_Minuten_Installation">Installationsanleitung</a> werden als nächste Schritte das Entpacken der ZIP-Datei, Editieren der wp-config.php und das Hochladen aller Dateien per FTP genannt. Für 1&amp;1 empfehle ich eine leicht veränderten, weil schnelleren Weg, der ohne zusätzliches FTP-Programm auskommt.</p>
<p>Mit dem <a href="http://hilfe-center.1und1.de/hosting/homepage/webspaceexplorer/2.html">1&amp;1-WebspaceExplorer</a> wird die <em>wordpress.zip</em>-Datei, so wie sie ist, <a href="http://hilfe-center.1und1.de/hosting/homepage/webspaceexplorer/4.html">hochgeladen</a>. Anschließend wird sie direkt <a href="http://hilfe-center.1und1.de/hosting/homepage/webspaceexplorer/8.html">auf dem Server entpackt</a>. Beim Entpacken entsteht ein Verzeichnis <em>wordpress</em>, welches man nach eigenen Wünschen umbenennen kann.</p>
<p>Nun holt man sich per Download aus diesem Verzeichnis die <em>wp-config-sample.php</em> auf den Rechner, bennent sie in <em>wp-config.php</em> um, trägt die Konfigurationsdaten ein und lädt sie mit dem WebspaceExplorer in das Wordpress-Verzeichnis auf dem Server.</p>
<h3 id='php5'>Umstellung auf PHP 5</h3>
<p>An erster Stelle ist die Umstellung auf PHP5 zu nennen. Mit PHP4 gibt es besonders im Wordpress-Backend Probleme, beispielsweise beim Hochladen von Bildern über die Medienverwaltung. Wie man bei 1&amp;1 erreichen kann, daß alle PHP-Skripte mit PHP 5 ausgeführt werden, ist auch in den <a href="http://hilfe-center.1und1.de/hosting/scripte_datenbanken/php/18.html">1&amp;1-FAQ</a> beschrieben. Man erstellt eine Datei <em>.htaccess</em> oder ergänzt eine bereits vorhandene Datei mit folgenden Zeilen:</p>
<pre>AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php</pre>
<p>Diese Datei kopiert man per FTP oder mit dem 1&amp;1-WebspaceExplorer in das Wurzelverzeichnis der Webpräsenz</p>
<h3>Wordpress installieren</h3>
<p>Nun kann man die Wordpress-Installation wie in der Dokumentation beschrieben starten:</p>
<pre>http://wp-example.net/wp-admin/install.php</pre>
<h3 id='php_memory'>Maximal nutzbarer PHP-Speicher (memory_limit) 32M</h3>
<p>Auch wenn für den PHP-Speicher <a href="http://www.ihre-webhosting-domain.de/php/phpinfo.php5">bei 1und1 40M</a> angezeigt werden, so sind doch nur effektiv 32M nutzbar. Deshalb kann durchaus folgende Fehlermeldung auftreten:</p>
<blockquote><p><strong>Fatal error</strong>: Out of memory (allocated 33030144)<br />
(tried to allocate 4600 bytes) in &#8230;</p></blockquote>
<p>Das ist etwas anderes als:</p>
<blockquote><p><strong>Fatal error</strong>: Allowed memory size of 33554432 bytes exhausted<br />
(tried to allocate 4650 bytes) in &#8230;</p></blockquote>
<p>Der Fehler kann z.B. beim automatischen Update von Wordpress vorkommen, obwohl WP intern das Speicherlimit auf 256M hochsetzt und das auch so angezeigt wird. Aber egal wie hoch man den Parameter <em>memory_limit</em> konfiguriert, es gibt bei 1&amp;1 derzeit die Grenze bei 32 MB. Hier hilft nur, während des Updates den Speicherverbrauch zu reduzieren, indem man beispielsweise alle Plugins vorher deaktiviert und danach wieder aktiviert.</p>
<p>Auf eine Supportanfrage bei 1&amp;1 bezüglich der 32M-Speichergrenze bekam ich folgende Antwort:</p>
<blockquote><p>Effektiv liegt das von Ihnen nutzbare Speicherlimit bei 32 MB, da ein Teil der Ressourcen für die Ausführung von PHP selbst benötigt wird.</p></blockquote>
<p>Nun ja, wirklich glauben kann ich das nicht.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-beim-11-webhosting-11-homepage-220/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Warum Wordpress bei Strato so langsam ist</title>
		<link>http://schnurpsel.de/warum-wordpress-bei-strato-so-langsam-ist-161/</link>
		<comments>http://schnurpsel.de/warum-wordpress-bei-strato-so-langsam-ist-161/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 14:05:13 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Strato]]></category>
		<category><![CDATA[Webhosting]]></category>
		<category><![CDATA[Webserver]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/warum-wordpress-bei-strato-so-langsam-ist-161/</guid>
		<description><![CDATA[Eigentlich müßte ich besser sagen, was ist kein Grund dafür, daß Wordpress beim Strato-Shared-Webhosting so langsam ist. Denn an einer vermeintlich schlechten Datenbankanbindung bzw. Datenbankperformance, wie man es oft in Foren oder auf Blogs lesen kann, liegt es nicht.
Datenbankgeschwindigkeit, der Test
Bei Wordpress kann man sich alle Datenbankabfragen als SQL-String mit Ausführungszeiten und Aufrufhierarchie in Datenbank-Objekt unter $wpdb->queries speichern lassen. Dazu muß man in der <a href='http://schnurpsel.de/warum-wordpress-bei-strato-so-langsam-ist-161/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Eigentlich müßte ich besser sagen, was ist <strong>kein Grund</strong> dafür, daß Wordpress beim Strato-Shared-Webhosting so langsam ist. Denn an einer vermeintlich <strong>schlechten Datenbankanbindung bzw. Datenbankperformance</strong>, wie man es oft in <a href="http://www.abakus-internet-marketing.de/foren/viewtopic/t-53920.html">Foren</a> oder auf <a href="http://www.der-medien-blog.de/baldiger-serverwechsel/">Blogs</a> lesen kann, liegt es <strong>nicht</strong>.</p>
<h3>Datenbankgeschwindigkeit, der Test</h3>
<p>Bei Wordpress kann man sich alle Datenbankabfragen als SQL-String mit Ausführungszeiten und Aufrufhierarchie in Datenbank-Objekt unter <em>$wpdb->queries</em> speichern lassen. Dazu muß man in der wp-config.php die Konstante &#8216;SAVEQUERIES&#8217; mit true definieren:</p>
<pre>define( 'SAVEQUERIES', true );</pre>
<p>Genau das habe ich für die Startseite von schnurpsel.de gemacht und mir die Daten als PHP-Array in eine Datei geschrieben:</p>
<pre>global $wpdb;
ob_start();
var_export( $wpdb->queries );
$out1 = ob_get_contents();
ob_end_clean();
plw123_debugfile_write( $out1 );</pre>
<p>Diese Liste mit 51 SQL-Abfragen habe ich in ein einfaches PHP-Skript eingebunden und arbeite die Abfragen hintereinander ab. Es wird zunächst ein Connect zur Datenbank ausgeführt und anschließend folgende Schleife durchlaufen:</p>
<pre>foreach( $sql_queries as $query ) {
	$dbd = @mysql_query( $query[0], $dbh );

	while( $row = @mysql_fetch_object( $dbd ) ) {
		$last_result[$num_rows] = $row;
		$num_rows++;
	}
	@mysql_free_result( $dbd );
	$num_queries++;
}</pre>
<p>Es werden natürlich nicht nur die SQL-Abfragen ausgeführt, sondern auch die Ergebnisdatensätze mit <em>mysql_fetch_object</em> abgeholt. Nur die Ausgabe der Daten spare ich mir, das hat dann aber sowieso nichts mehr mit der Datenbank zu tun.</p>
<h3>Datenbankgeschwindigkeit, das Ergebnis</h3>
<p>Mal von ein paar Lastspitzen abgesehen, werden die <strong>51 Abfragen</strong> und <strong>539 Ergebnisdatensätze</strong> vom Strato MySQL 5 Server in etwa <strong>0,2 Sekunden</strong> abgearbeitet. Man kann das hier [test-db-mysql5] live testen.</p>
<p>Ich habe das auch mal mit MySQL 4 probiert, da sind die Werte sogar noch etwas besser und liegen meist bei 0,1 Sekunden oder darunter [test-db-mysql4].</p>
<p>Und als dritten Test habe ich eine externe Datenbank (bei Host-Europe) eingebunden [test-db-ext]. Die 0,5 bis 0,6  Sekunden sind gar nicht mal so schlecht wenn man bedenkt, daß alle Daten über das Internet von Strato (Karlsruhe/Berlin) zu Host-Europe (Köln) und wieder zurück befördert werden müssen.</p>
<h3>Mein Fazit</h3>
<p>Die schlechte Geschwindigkeit von Wordpress (und anderen umfangreichen PHP-Applikationen wie z.B. Joomla) liegt ursächlich nicht an einer schlechten Datenbankperformance, sondern vielmehr an einem nicht besonders schnellen Webserver/PHP.</p>
<p>Was hier nun im einzelnen das Problem ist, kann ich nicht sagen. Ein Geschwindigkeits-Nachteil ist sicher die Tatsache, daß PHP bei Strato als CGI läuft. Das bedeutet, daß für jeden Seitenaufruf ein neuer PHP-Prozeß gestartet werden muß. Konfigurationen, bei denen PHP als Apache-Modul läuft, haben da natürlich einen Geschwindigkeitsvorteil.<br />
Vielleicht muß ja auch jede PHP-Datei bei Strato erst einen Sicherheitcheck durchlaufen, bevor sie geladen wird oder was auch immer.</p>
<p>Ein weiterer Hinweis für die mäßige PHP/Webserver-Performance sind auch die nicht besseren Ladezeiten des Strato Weblog-Basic, denn da ist überhaupt kein MySQL-Datenbankserver im Spiel. Die Daten liegen auf dem Webspace des Users und werden per SQLite eingebunden.</p>
<p>Trotz eigentlich nicht schlechter MySQL Datenbankgeschwindigkeit wird meine Startseite hier nicht schneller als in etwa 3,5 Sekunden geladen, dabei verwende ich fast eine WP-Standardkonfiguration ohne umfangreichen Plugins.</p>
<p>Meine Ausführungen tragen zwar nicht zur Lösung des Geschwindigkeitsproblems bei, aber vielleicht zum Verständnis der Ursache und Problematik an sich.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/warum-wordpress-bei-strato-so-langsam-ist-161/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Das Ende der Wordpress-Hacker</title>
		<link>http://schnurpsel.de/das-ende-der-wordpress-hacker-145/</link>
		<comments>http://schnurpsel.de/das-ende-der-wordpress-hacker-145/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 08:01:49 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[my-hacks]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/das-ende-der-wordpress-hacker-145/</guid>
		<description><![CDATA[Fällt Euch bei dem Bild hier links (anklicken zum Vergrößern) etwas auf? Es zeigt die Einstellungs-Seite für &#8220;Verschiedenes&#8221; der neuen Wordpress-Version 2.8. Diese kann man sich vorab schon herunterladen und testen. Darauf gestoßen bin ich beim Wordpress-Deutschland Blog im Artikel &#8220;WordPress 2.8 Feature Freeze&#8220;. Und da dachte ich mir so, schau ich mir die neue Vorabversion von Wordpress 2.8 doch schon mal an. Auf <a href='http://schnurpsel.de/das-ende-der-wordpress-hacker-145/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2009/04/wp-28-einstellungen-verschiedenes.png'><img src='http://schnurpsel.de/wp-content/uploads/2009/04/wp-28-einstellungen-verschiedenes-160x120.png' alt='Wordpress 2.8 - Einstellungen &gt; Verschiedenes' title='Wordpress 2.8 - Einstellungen &gt; Verschiedenes' class='alignleft' /></a>Fällt Euch bei dem Bild hier links (anklicken zum Vergrößern) etwas auf? Es zeigt die Einstellungs-Seite für &#8220;Verschiedenes&#8221; der neuen Wordpress-Version 2.8. Diese kann man sich vorab schon herunterladen und testen. Darauf gestoßen bin ich beim <a href="http://blog.wordpress-deutschland.org/">Wordpress-Deutschland Blog</a> im Artikel &#8220;<a href="http://blog.wordpress-deutschland.org/2009/04/18/wordpress-28-feature-freeze.html">WordPress 2.8 Feature Freeze</a>&#8220;. Und da dachte ich mir so, schau ich mir die neue Vorabversion von Wordpress 2.8 doch schon mal an. Auf den ersten Blick und nach dem Durchklicken aller Menüpunkte im Adminbereich (Backend) habe ich so auf die Schnelle keine wesentlichen Änderungen entdecken können.</p>
<p>Nur gaaaanz unten, auf der letzten Einstellungsseite &#8220;Verschiedenes&#8221; traf mich fast der Schock. Die Option</p>
<blockquote><p>[x] Die veraltete my-hacks.php-Datei unterstützen</p></blockquote>
<p>ist verschwunde. Ein schwerer Schlag ins Kontor, für mich als bekennenden Fan der <a href='http://schnurpsel.de/hackers-paradise-12/' title='Hackers Paradise'>my-hacks.php</a>-Datei.<br />
<strong>Nachtrag:</strong> <a href="http://core.trac.wordpress.org/ticket/9551">Hier</a> findet man, warum es dazu kam.</p>
<p>Gut, wenn man die Option nicht mehr im Backend einstellen kann heißt das ja noch nicht unbedingt, daß sie nicht mehr vorhanden ist. Und tatsächlich, die Option &#8216;hack_file&#8217; gibt es noch immer und die my-hacks.php wird in wp-settings.php auch noch geladen, sofern die Option aktiv ist. Allerdings ist die von mir getestete Version von Wordpress 2.8 eine noch recht frühe Version, also nicht Beta oder gar RC. Wenn alles schief läuft, fliegt die Unterstützung für die my-hacks.php doch noch ganz raus, was ich sehr bedauern würde.</p>
<p>Vielleicht überlebt sie aber doch noch im Hintergrund und für diesen Fall habe ich schnell ein kleines Plugin geschrieben, welches die Option wieder auf der Einstellungsseite &#8220;Verschiedenes&#8221; zum Leben erweckt läßt :-)</p>
<p><strong>Download:</strong> <a href='http://schnurpsel.de/wp-content/uploads/2009/04/plw123_hackfile_option_0_12.zip'>Plugin 123 Hackfile Option 0.12</a></p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/das-ende-der-wordpress-hacker-145/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Wordpress 2.7 &#8211; Wartungsmodus ohne Plugin</title>
		<link>http://schnurpsel.de/wordpress-27-wartungsmodus-ohne-plugin-139/</link>
		<comments>http://schnurpsel.de/wordpress-27-wartungsmodus-ohne-plugin-139/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 21:14:01 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[Wartung]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Wordpressupdate]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-27-wartungsmodus-ohne-plugin-139/</guid>
		<description><![CDATA[Seit Wordpress 2.7.x gibt es die Möglichkeit, Wordpress selbst aus dem Backend (Admin-Bereich) heraus zu aktualisieren. Damit während des Aktualisierungsprozesses, der je nach Umfang länger dauern kann und möglicherweise eine Datenbankaktualisierung erforderlich macht, auf Grund inkonsistenter Zustände keine Fehler auftreten, versetzt WP sich selbst in einen Wartungsmodus. Der Nutzer, der das Blog aufruft, bekommt einen kurzen Hinweis angezeigt, daß gerade eine Wartung läuft und <a href='http://schnurpsel.de/wordpress-27-wartungsmodus-ohne-plugin-139/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Seit Wordpress 2.7.x gibt es die Möglichkeit, Wordpress selbst aus dem Backend (Admin-Bereich) heraus zu aktualisieren. Damit während des Aktualisierungsprozesses, der je nach Umfang länger dauern kann und möglicherweise eine Datenbankaktualisierung erforderlich macht, auf Grund inkonsistenter Zustände keine Fehler auftreten, versetzt WP sich selbst in einen Wartungsmodus. Der Nutzer, der das Blog aufruft, bekommt einen kurzen Hinweis angezeigt, daß gerade eine Wartung läuft und die Seite bald wieder verfügbar ist.</p>
<p>Diesen Maintenance-Modus kann man ganz ohne WP-Coreupdate auch manuell aktivieren. Vielleicht sind ja irgendwelche Abeiten an der Datenbank erforderlich oder man möchte das Blog aus anderen Gründen vorübergehend vom Netz nehmen.</p>
<h3>So funktionierts</h3>
<p>Wordpress legt beim Start des Aktualisierungsprozesses einfach im WP-Wurzelverzeichnis eine Datei <em>.maintenance</em> an. In der Datei steht nur eine Zeile PHP-Code drin, in welchem die Variable <em>$upgrading</em> mit der Funtion <em>time()</em> den Startzeitpunktes fest zugewiesen bekommt. Nach erfolgreichem Update wird diese Datei einfach wieder gelöscht. Sollte was schief laufen und die Datei ist nach 10 Minuten ab Start imm noch da, wird der Maintenance-Modus beendet und der Admin erhält im Backend einen entsprechneden Hinweis angezeigt.</p>
<p>Um Wordpress direkt in den Wartungsmodus zu versetzen, reicht es also, eine Datei mit folgendem Imhalt in das Wordpress-Wurzelverzeichnis zu kopieren:</p>
<pre>&lt;?php $upgrading = time(); ?&gt;</pre>
<p>Am einfachsten ist es, diese <a href='http://schnurpsel.de/wp-content/uploads/2009/03/maintenance.txt'>maintenance.txt</a>-Datei per FTP in das Wordpress-Wurzelverzeichnis zu kopieren und dort in <strong><em>.maintenance</em></strong> umzubenennen.<br />
Das war es schon, ab sofort gibt die Seite nur noch diese Meldung aus:</p>
<p><strong>Die Seite ist ganz kurz nicht erreichbar. In einer Minute sollte wieder alles klappen.</strong></p>
<p>Auch das Backend ist nicht erreichbar, man kann sich also nicht anmelden noch sonst etwas im Adminbereich machen.<br />
Um den Wartungsmodus zu beenden, muß man einfach die Datei <em>.maintenance</em> löschen oder z.B. wieder in <em>maintenance.txt</em> umbenennen.</p>
<h3>Wartungsmodus mit Adminzugriff</h3>
<p>Nun möchte man aber vielleicht trotz Wartungsmodus auf den Adminbereich zugreifen. Dafür muß man die .maintenance-Datei dahingehend erweitern, daß überprüft wird, ob Seiten aus dem Adminberich oder die wp-login.php aufgerufen wurden. Ich habe das wie folgte realisiert:</p>
<pre>&lt;?php
$url_parts = parse_url( $_SERVER['REQUEST_URI'] );
$path_parts = pathinfo( $url_parts['path'] );
$dir_parts = explode( "/", $path_parts['dirname'] );
$dirname = end($dir_parts);
$filename = $path_parts['basename'];

$is_admin =	'wp-admin'==$dirname || 'wp-admin'==$filename;
$is_login =	'wp-login.php'==$filename;

if( $is_admin || $is_login )
	unset( $upgrading );
else
	$upgrading = time();
?&gt;</pre>
<p>Download: <a href='http://schnurpsel.de/wp-content/uploads/2009/03/maintenance_admin.zip'>maintenance admin</a></p>
<p>Auch hier einfach die ZIP-Datei entpacken, die enthaltene Datei <em>maintenance_admin.txt</em> per FTP in das WP-Wurzelverzeichnis kopieren und in <em>.maintenance</em> umbenennen.</p>
<p>Nun wird beim Aufruf des Blogs der Wartungshinweis angezeigt, man kann sich aber im Backend anmelden und dort alles machen, was sich innerhalb des Admin-Breiches abspielt. Demzufolge funktionieren z.B. aber die Artikelvorschau und die Themevorschau nicht.</p>
<p>Es ist natürlich möglich, weitere Bedingungen zu prüfen und die Zugriffsmöglichkeiten zu erweitern. Man muß aber beachten, das innerhalb der <em>.maintenance</em>-Datei kein Zugriff auf irgendwelche Wordpress-Funktionen besteht und man weitestgehend mit dem auskommen muß, was PHP zur Verfügung stellt. So kann man nicht etwa die Anmeldung mit den Nutzerdaten überprüfen, wohl aber das vorhandensein des Anmelde-Cookies.</p>
<h3>Wartungsmeldung anpassen</h3>
<p>Wem die schlichte Meldung nicht gefällt, die Wordpress im Wartungsmodus ausgibt, kann auch hier selbst Hand anlegen. Dazu prüft Wordpress, ob es im <em>wp-content</em>-Verzeichnis eine Datei <strong><em>maintenance.php</em></strong> gibt und wenn ja, wird diese anstelle der Standarmeldung geladen und ausgeführt.</p>
<p>Als Beispiel habe ich den Code aus der <em>wp-settings.php</em> genommen und leicht angepaßt:</p>
<pre>&lt;?php
	$retry = 120;
	$protocol = $_SERVER[&quot;SERVER_PROTOCOL&quot;];
	if ( 'HTTP/1.1' != $protocol &amp;&amp; 'HTTP/1.0' != $protocol )
		$protocol = 'HTTP/1.0';
	header( &quot;$protocol 503 Service Unavailable&quot;, true, 503 );
	header( 'Content-Type: text/html; charset=utf-8' );
	header( &quot;Retry-After: $retry&quot; );
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
	&lt;title&gt;Wartungsarbeiten&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;Wartungsarbeiten&lt;/h1&gt;
	&lt;p&gt;Die Seite ist für kurze Zeit nicht erreichbar. In ein paar Minute sollte wieder alles klappen.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Download: <a href='http://schnurpsel.de/wp-content/uploads/2009/03/maintenance.zip'>maintenance.zip</a><br />
Die ZIP-Datei entpacken, die enthaltene Datei <em>maintenance.php</em> gegebenfalls nach eigenen Wünschen anpassen und per FTP in das <em>wp-content</em>-Verzeichnis kopieren.</p>
<p>Wichtig ist das korrekte Setzen vom HTTP-Status im Antwort-Header. Für Wartungsarbeiten oder sonstige, zeitweilige Ausfälle sieht HTTP den <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4">Status 503</a> vor. Zudem sollte auch ein Wert für <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.37">Retry-After</a> gesetzt werden. Ich habe da jetzt 120 Sekunden genommen, es kann aber auch ein konkreter <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3">Zeitpunkt</a> eingetragen werde, zu dem das Blog voraussichtlich wieder verfügbar ist.</p>
<p>Nach dem PHP-Block kann man seiner Phantasie HTML-technisch freien Lauf lassen. Aber auch hier gilt, man hat <strong>keinen</strong> Zugriff auf irgendwelche Wordpress-Funktionen.</p>
<h3>Fazit</h3>
<p>Seit Wordpress 2.7 ist es mit einfachen Hausmitteln ohne Plugin möglich, das Blog in einen Wartungsmodus zu versetzen, um Zugriffe während Arbeiten am System oder der Datenbank zu unterbinden. Optional kann auch der Zugriff auf das Backend (wp-admin) gewähleistet werden.</p>
<p><strong>Vorteil</strong> dieser einfachen Lösung ist es, daß sie bereits greift, bevor WP selbst geladen wird und auch bevor irgendwelche Zugriffe auf die Datenbank erfolgen. <strong>Kleiner Nachteil</strong> ist, daß innerhalb der <em>.maintenance</em>-Datei und der optionalen Meldungsseite maintenance.php kein Zugriff auf Wordpressfunktionen besteht.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-27-wartungsmodus-ohne-plugin-139/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mit Wordpress per E-Mail bloggen</title>
		<link>http://schnurpsel.de/mit-wordpress-per-e-mail-bloggen-89/</link>
		<comments>http://schnurpsel.de/mit-wordpress-per-e-mail-bloggen-89/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 18:44:12 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[bloggen]]></category>
		<category><![CDATA[E-Mail]]></category>
		<category><![CDATA[Handy]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/mit-wordpress-per-e-mail-bloggen-89/</guid>
		<description><![CDATA[Mit meinem schon etwas betagten Handy Siemens S 65 kann ich im Web surfen, allerdings nur auf WAP-Seiten. Um mal eben schnell einen kurzen Blogartikel zu verfassen, ist der integrierte Mini-Browser nicht geeignet. Ich kann mit dem Handy aber auch E-Mails verschicken und Wordpress kann Artikel per E-Mail einlesen. Für kleine Texte ist das also ein durchaus gangbarer Weg, um die geneigte Leserschaft auch <a href='http://schnurpsel.de/mit-wordpress-per-e-mail-bloggen-89/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Mit meinem schon etwas betagten Handy Siemens S 65 kann ich im Web surfen, allerdings nur auf WAP-Seiten. Um mal eben schnell einen kurzen Blogartikel zu verfassen, ist der integrierte Mini-Browser nicht geeignet. Ich kann mit dem Handy aber auch E-Mails verschicken und Wordpress kann Artikel per E-Mail einlesen. Für kleine Texte ist das also ein durchaus gangbarer Weg, um die geneigte Leserschaft auch von Unterwegs auf dem Laufenden zu halten.</p>
<h3>So funktionierts</h3>
<p>Man schickt eine E-Mail an eine konfigurierte E-Mail-Adresse, Wordpress fragt diese ab und stellt neue Mails als Artikel im Blog ein. Eigentlich ganz einfach, man sollte jedoch einige Dinge beachten.</p>
<p>Damit nicht jeder einfach per E-Mail auf dem Blog Artikel veröffentlichen kann, sollte man eine neue, geheime E-Mail-Adresse einrichten. Diese kann dort liegen, wo auch das Blog gehostet ist, muß sie aber nicht. In jedem Fall sollte sie einen möglichst &#8220;kryptischen&#8221; Namen haben, damit dieser nicht einfach zu erraten ist. Also nicht etwa <em>mailblog@schnurpsel.de</em>, sondern besser <em>SuXiy2zt8k@schnurpsel</em>.</p>
<h3>Konfiguration in Wordpress</h3>
<p>Nun können die Daten für den neu erstellten E-Mail-Account bei den Einstellungen->Schreiben im Bereich &#8220;Via E-Mail schreiben&#8221; eingetragen werden:<br />
<a href='http://schnurpsel.de/wp-content/uploads/2008/04/via-e-mail-schreiben.png'><img src="http://schnurpsel.de/wp-content/uploads/2008/04/via-e-mail-schreiben-300x178.png" alt="" title="Via E-Mail schreiben" width="300" height="178" class="alignnone size-medium wp-image-90" /></a><br />
Neben den E-Mail-Daten kann man hier auch eine Kategorie festlegen, in der die Artikel erscheinen sollen. Man könnte sich ja z.B. eine spezielle Kategorie &#8220;Unterwegs&#8221; anlegen, die dann die E-Mail-Artikel aufnimmt und vielleicht gar nicht auf der Hauptseite angezeigt wird.</p>
<h3>Artikel per E-Mail bloggen</h3>
<p>Jetzt kann es losgehen, einfach eine E-Mail an die konfigurierte E-Mail-Adresse schicken. Das was als Betreff (Subject) in der E-Mail steht, wird zum Titel des Artikels. Der eigentlich Inhalt der Mail wird, ja richtig, zum Inhalt des Artikels im Blog.<br />
Da Wordpress aber von sich aus nicht merkt, daß ein neuer Artikel via E-Mail angekommen ist, muß es zum Abrufen der E-Mails aufgefordert werden. Das geht im einfachsten Fall manuell durch Aufrufen der Datei wp-mail.php im Wordpress-Wurzelverzeichnis. Bei mir wäre das also z.B. <em>schnurpsel.de/wp-mail.php</em>. Falls neue Artikel vorhanden waren, wird dies etwa wie folgt bestätigt:</p>
<blockquote><p>Author: 1<br />
Posted title: Ein Beitrag per E-Mail<br />
Mission complete, message 1 deleted.</p></blockquote>
<p>Wenn nichts angekommen ist, gibt es nur ein einfaches:</p>
<blockquote><p>There doesn&#8217;t seem to be any new mail.</p></blockquote>
<p>Das Abrufen der E-Mails durch WP kann man auch zeitgesteuert automatisieren, eine umfangreiche englische Beschreibung findet man hier: <a href="http://codex.wordpress.org/Blog_by_Email">Post to your blog using email</a></p>
<h3>Neu ab Wordpress 2.5</h3>
<p>Bis zu Wordpress 2.3.x war es egal, woher die Artikel-E-Mail gekommen ist, also welche Absender-Adresse im <em>From:</em> steht, der Artikel erschien unmittelbar auf dem Blog.<br />
Mit Wordpress 2.5 ist das nicht mehr so. Von der Absender-E-Mail-Adresse hängt es ab, ob der Artikel direkt veröffentlicht wird  (Status: &#8216;publish&#8217;) oder nur als Enwurf (Status: &#8216;pending&#8217;) gespeichert wird.</p>
<p>Wordpress versucht an Hand der Absender-Adresse einen registrierten Nutzer zu finden, der dieselbe E-Mail-Adresse hat. Wird ein solcher gefunden und dieser ist zudem berechtigt, Artikel zu veröffentlichen, dann erscheint der Artikel mit dem Nutzer als Autor direkt auf dem Blog. Gibt es jedoch keinen passenden Nutzer, landet der Artikel nur im Backend und erscheint in der Artikelliste mit dem Status &#8220;Ausstehender Review&#8221;.</p>
<p>Damit wurde die Hürde für einen Mißbrauch der E-Mail-To-Blog-Funktion ein klein wenig höher gelegt, den der &#8220;Angreifer&#8221; muß nicht nur die kryptische WP-Blog-E-Mail-Adresse kennen, sondern zudem noch die eines befugten Autors.</p>
<h3>Fazit</h3>
<p>Bloggen von Unterwegs z.B. mit dem Handy ist durchaus möglich. Aus Sicherheitsgrunden sollte man aber einige Punkte beachten. Beim Unstieg auf Wordpress 2.5 von einer älteren Version sollte man das geänderte Veröffentlichungsverhalten beachten.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/mit-wordpress-per-e-mail-bloggen-89/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Es geht doch, Kontaktformular mit POST und Permalinks</title>
		<link>http://schnurpsel.de/es-geht-doch-kontaktformular-mit-post-und-permalinks-71/</link>
		<comments>http://schnurpsel.de/es-geht-doch-kontaktformular-mit-post-und-permalinks-71/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 21:50:22 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Kontaktformular]]></category>
		<category><![CDATA[Permalink]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Strato]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/es-geht-doch-kontaktformular-mit-post-und-permalinks-71/</guid>
		<description><![CDATA[Mein 123 No Rewrite Permalink Plugin hat einen kleinen Nachteil, es können keine Formulardaten per POST an eine Permalinkseite gesendet werden. Deshalb funktionieren z.B. Kontaktformular-Plugins wie der &#8220;DD Formmailer&#8221; nicht. Ich habe auf der Pluginseite und auch bei meiner Strato-Permalink-Konfigurationsseite darauf hingewiesen.
Angeregt durch einen Beitrag im WP-Deutschland-Forum habe ich noch mal über das Problem nachgedacht und bin auf eine recht einfache Lösung gekommen. Diese <a href='http://schnurpsel.de/es-geht-doch-kontaktformular-mit-post-und-permalinks-71/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Mein <a href="http://putzlowitsch.de/123-no-rewrite-permalink/">123 No Rewrite Permalink</a> Plugin hat einen kleinen Nachteil, es können keine Formulardaten per POST an eine Permalinkseite gesendet werden. Deshalb funktionieren z.B. Kontaktformular-Plugins wie der &#8220;DD Formmailer&#8221; nicht. Ich habe auf der Pluginseite und auch bei meiner <a href='http://schnurpsel.de/wordpress-bei-strato/wordpress-permalinks/' title='Wordpress Permalinks'>Strato-Permalink-Konfigurationsseite</a> darauf hingewiesen.<br />
Angeregt durch einen <a href="http://forum.wordpress-deutschland.org/plugins-und-widgets/27923-kontaktformulare-funktionieren-grundsaetzlich-nicht.html">Beitrag im WP-Deutschland-Forum</a> habe ich noch mal über das Problem nachgedacht und bin auf eine recht einfache Lösung gekommen. Diese ist zumindest dann praktikabel, wenn es nur um eine oder wenige Seiten mit Formularen geht, in der Regel wird es nur eine Seite für &#8220;Kontakt&#8221; oder ähnliches sein. Am Beispiel des schon erwähnten <a href="http://www.dagondesign.com/articles/secure-form-mailer-plugin-for-wordpress/">DD-Formmailers</a> werde ich die erforderlichen Schritte beschreiben. Ich gehe davon aus, daß das Formmailer-Plugin bereits installiert ist.</p>
<p>Zunächst wird eine neue statische Seite erstellt, die z.B. &#8220;Kontakt&#8221; heißt. Hier wird der Text und Code für den Formmailer eingegeben. Die URL der Seite lautet dann beispielsweise
<pre>http://schnurpsel.de/kontakt/</pre>
<p>Diese wird bei den Einstellungen für den DD-Formmailer als <strong>&#8220;Contact page&#8221;</strong> eingetragen.</p>
<p>Dann wird eine Kopie der Datei <em>index.php</em> aus dem Wordpress-Wurzelverzeichnis erstellt und bearbeitet.<br />
Originale <em>index.php</em>:</p>
<pre>&lt;?php
/* Short and sweet */
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
?&gt;</pre>
<p>Bearbeitete <em>index.php</em>:</p>
<pre>&lt;?php
/* Short and sweet */
define('WP_USE_THEMES', true);
require('../wp-blog-header.php');
?&gt;</pre>
<p>Kleine Änderung, große Wirkung, es ist nur ein Punkt beim require hinzugekommen.<br />
Nun wird per FTP im WP-Wurzelverzeichnis ein Unterverzeichnis <em>/kontakt/</em> angelegt und die geänderte <em>index.ph</em>p dort hinein kopiert.</p>
<p>Das wars, jetzt kann man die Kontaktseite aufrufen und Daten absenden, sofern man sonst auch alles andere beim DD-Formmailer richtig konfiguriert hat.<br />
Man kann das auch bei mir hier testen, unter Kontakt, wo sonst? :-)</p>
<p>Und zum Schluß noch ein <strong>wichtiger Hinweis</strong>: Falls man im WP-Wurzelverzeichnis eine <em>php.ini</em> hat, muß diese ebenfalls mit in das <em>/kontakt/</em>-Verzeichnis kopiert werden, denn im Unterschied zur <em>.htaccess</em> werden die dort gemachten Einstellungen nicht auf Unterverzeichnisse &#8220;vererbt&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/es-geht-doch-kontaktformular-mit-post-und-permalinks-71/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wordpress 2.3 &#8211; Problem ohne www bei Strato</title>
		<link>http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/</link>
		<comments>http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/#comments</comments>
		<pubDate>Sat, 29 Sep 2007 15:34:53 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Endlosschleife]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Strato]]></category>
		<category><![CDATA[Weiterleitung]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/</guid>
		<description><![CDATA[Hintergrund
Es war mir ja schon fast am Anfang meiner Strato-Zeit aufgefallen. Die Servervariable HTTP_HOST liefert immer den Hostname mit einem vorangestellten www zurück, selbst dann, wenn der Aufruf ohne www erfolgte. Eigentlich eine eigenwillige, wenn nicht gar falsche Konfiguration des Strato-Severs, denn die Variable HTTP_HOST soll eigentlich genau das enthalten, was der Browser im HTTP-Requestheader übermittelt. Wenn ich also die Seite schnurpsel.de aufrufe, dann <a href='http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<h3>Hintergrund</h3>
<p>Es war mir ja schon fast am Anfang meiner Strato-Zeit aufgefallen. Die Servervariable HTTP_HOST liefert immer den Hostname mit einem vorangestellten www zurück, selbst dann, wenn der Aufruf ohne www erfolgte. Eigentlich eine eigenwillige, wenn nicht gar falsche Konfiguration des Strato-Severs, denn die Variable HTTP_HOST soll eigentlich genau das enthalten, was der Browser im HTTP-Requestheader übermittelt. Wenn ich also die Seite schnurpsel.de aufrufe, dann sollte eben das da drin stehen, und nicht etwa www.schnurpsel.de. Aber genau das passiert bei Strato (PowerWeb A und S).</p>
<h3>Problem</h3>
<p>Bisher stellte das auch kein Problem dar, mit dem Neuen Wordpress 2.3 aber schon (deshalb war meine Seite gestern Abend auch zeitweise nicht erreichbar). Ab Wordpress 2.3 ist eine Funktion integriert, die ein sogenanntes &#8220;<a href="http://markjaquith.wordpress.com/2007/09/25/wordpress-23-canonical-urls/">Canonical Redirect</a>&#8221; ausführt. Auf das Strato-Problem bezogen bedeutet das, daß eine Weiterleitung z.B. dann stattfindet, wenn der Aufruf der Seite nicht so erfolgt, wie das in der Wordpresskonfiguration eingestellt ist.<br />
Wenn z.B in Wordpress als Blog-Adresse (URL)
<pre>http://schnurpsel.de</pre>
<p> eingetragen ist, jemand aber die Seite mit
<pre>http://www.schnurpsel.de</pre>
<p> aufruft, wird er auf
<pre>http://schnurpsel.de</pre>
<p> umgeleitet (und anders rum). An sich eine sinnvolle Sache, gerade unter SEO-Aspekten.</p>
<p>Was passiert nun aber bei Strato? Die funktion <em>redirect_canonical</em> schaut in HTTP_HOST nach, wie die Seite aufgerufen wurde, stellt fest, daß da ein www steht, aber das Blog ohne www konfiguriert ist. Also wird flux auf die Adresse ohne <em>www</em> weitergeleitet (diese Information bekommt der Browser zurück). Der ruft dann brav die Seite erneut ohne <em>www</em> auf, weil aber Strato das <em>www</em> wieder vorneran stellt, leitet <em>redirect_canonical</em> erneut um, der Browser ruft wieder brav ohne <em>www</em> auf usw. usw. Es ensteht also eine Weiterleitungs-Endlosschleife, die der Browser dann aber (hoffentlich) nach ein paar Versuchen mit einer Meldung beenden sollt. Beim Firefox sieht das dann so aus:</p>
<blockquote><p><strong>Fehler: Umleitungsfehler</strong><br />
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.</p></blockquote>
<p>Das alles tritt aber nur beim Blog selber auf, der Adminbereich ist davon nicht betroffen.</p>
<h3>Lösung</h3>
<p>Aber auch hier gibt es mit einem bißchen Basteln Abhilfe. Glücklicherweise gibt es in den Servervariablen einen Eintrag, der die tatsächlich aufgerufene Adresse enthält, nämlich SCRIPT_URI. Dieser enthält die vollständigen Aufrufadresse mit http und gegebenfalls Verzeichnis und Dateiname, z.B.
<pre>http://schnurpsel.de</pre>
<p> Hier kann man einfach den echten Hostanamen extrahieren und der Variable HTTP_HOST zuweisen. Und schon ist die Welt wieder in Ordnung :-)</p>
<p>Also Wordpress-Plugin sehen die paar Zeilen PHP-Code dann so aus:</p>
<pre>&lt;?php
/*
Plugin Name: 123 True HTTP Host
Plugin URI: http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/
Description: Setzt den wahren HTTP_HOST aus dem Request. Bei Strato wird immer www davor geschrieben.
Author: Ingo Henze
Version: 0.10
Author URI: http://putzlowitsch.de/
*/
$plw123thh = parse_url( $_SERVER['SCRIPT_URI'] );
if( isset( $plw123thh['host'] ) &#038;&#038; ($plw123thh['host']!=$_SERVER['HTTP_HOST']) )
  $_SERVER['HTTP_HOST'] = $plw123thh['host'];
?&gt;</pre>
<p>Mann kann den Quelltext hier einfach rauskopieren, in einer Datei speichern,auf den Server in das Pluginverzeichnis kopieren und aktivieren. Oder man nimmt das fertige Plugin als ZIP-Datei.</p>
<p><strong>Download:</strong> <a href='http://schnurpsel.de/wp-content/uploads/2007/09/plw123_true_http_host_0_10.zip' title='123 True HTTP Host 0.10'>123 True HTTP Host 0.10</a></p>
<p>Im Übrigen tritt das Problem mit der Weiterleitungs-Endlosschleife bei einer Konfiguration mit <em>www</em> nicht auf, allerdings funktioniert dann das redirect_canonical auch nicht, weil die Seiten ja scheinbar immer korrekt mit <em>www</em> aufgerufen werde.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/feed/</wfw:commentRss>
		<slash:comments>104</slash:comments>
		</item>
		<item>
		<title>IIS Wordpress Permalinks</title>
		<link>http://schnurpsel.de/iis-wordpress-permalinks-52/</link>
		<comments>http://schnurpsel.de/iis-wordpress-permalinks-52/#comments</comments>
		<pubDate>Fri, 29 Jun 2007 15:58:31 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Permalink]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Rewrite]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/iis-wordpress-permalinks-52/</guid>
		<description><![CDATA[Ja, es war mir schon klar, daß ich nicht der erste bin, der sich dieses Problems annimmt. Bei wordpress.org selbst ist es im Codex unter dem Titel  &#8220;Using Permalinks Without mod_rewrite&#8221; bereits angeschnitten und es gibt auch drei Lösungen dafür. Zwei gehen den Weg über ein spezielles ISAPI-Filter und eine Lösung verwendet auch den 404er Trick. Allerdings werden dort die Permalinks über ein <a href='http://schnurpsel.de/iis-wordpress-permalinks-52/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Ja, es war mir schon klar, daß ich nicht der erste bin, der sich <a href='http://schnurpsel.de/exoten-51/' title='Exoten'>dieses Problems</a> annimmt. Bei wordpress.org selbst ist es im Codex unter dem Titel  &#8220;<a href="http://codex.wordpress.org/Using_Permalinks#Using_Permalinks_Without_mod_rewrite">Using Permalinks Without mod_rewrite</a>&#8221; bereits angeschnitten und es gibt auch drei Lösungen dafür. Zwei gehen den Weg über ein spezielles ISAPI-Filter und eine Lösung verwendet auch den 404er Trick. Allerdings werden dort die Permalinks über ein .asp-Programm umgesetzt. Das funktioniert auch für die Oldstyle-Permalinks (WordPress 1.X), als noch alle Rewrite-Regeln in der .htaccess-Datei standen. Meine Lösung funktioniert nur bei den Newstyle-Permalinks (WordPress 2.X),  bei denen nur noch die index.php angesprochen wird und die Auflösung der REQUEST_URI WP-intern erfolgt.</p>
<p>Generell kann ich die Lektüre der <a href="http://codex.wordpress.org/Using_Permalinks">Permalink-Codex-Seite</a> wärmstens empfehlen. Da bekommt man einen guten Überblick, was Permalinks sind, wie sie funktionieren und was man alles damit machen kann (und was nicht). Die Seite sollte auch mal auf Deutsch bei Wordpress-Deutschland aufgenommen werden, viele Fragen im WPD-Forum drehen sich um Permalinks und wären sicher mit dieser Seite einfach beantwortet.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/iis-wordpress-permalinks-52/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exoten</title>
		<link>http://schnurpsel.de/exoten-51/</link>
		<comments>http://schnurpsel.de/exoten-51/#comments</comments>
		<pubDate>Wed, 27 Jun 2007 19:14:16 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Permalink]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Rewrite]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/exoten-51/</guid>
		<description><![CDATA[Es scheint doch tatsächlich Leute zu geben, die ernsthaft Wordpress auf einem IIS (was ist das?) laufen lassen :-)
Naja, es funktioniert wohl sogar. PHP mit MySQL bekommt man da auch ans laufen, also eigentlich kein großes Ding. Wenn da nicht die Sache mit den Permalinks wäre. Denn die erfordern nun mal ein funktionierendes mod_rewrite, was es aber meines Wissens nur für den Apache-Webserver gibt. <a href='http://schnurpsel.de/exoten-51/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Es scheint doch tatsächlich Leute zu geben, die ernsthaft <a href="http://forum.wordpress-deutschland.org/konfiguration/22436-permalinks-ohne-apache-anpassen.html">Wordpress auf einem IIS</a> (<a href="http://de.wikipedia.org/wiki/Microsoft_Internet_Information_Services">was ist das?</a>) laufen lassen :-)<br />
Naja, es funktioniert wohl sogar. PHP mit MySQL bekommt man da auch ans laufen, also eigentlich kein großes Ding. Wenn da nicht die Sache mit den Permalinks wäre. Denn die erfordern nun mal ein funktionierendes mod_rewrite, was es aber meines Wissens nur für den Apache-Webserver gibt. Zumindest kann der IIS von Hause aus nichts mit den entsprechenden Einträgen in der .htaccess anfangen. Und Wordpress ist auch so schlau, erkennt, daß es unter einem ISS läuft und bietet dann für die Permalinks gleich nur die Form mit dem vorangestellten /index.php an. Die sehen dann z.B. so aus:<br />
<code>/index.php/die-wordpress-import-schnittstelle-47/</code><br />
Gut, es funktioniert auch aber ist doch eher nur ein Notbehelf, eine Krücke. Schöner sieht es natürlich so aus:<br />
<code>/die-wordpress-import-schnittstelle-47/</code></p>
<p>Das muß aber nicht bei der index.php-Variante bleiben, denn das Problem ist ein ähnliches wie bei den Strato-PowerWeb-Paketen, bei denen zwar ein Apache mit mod_rewrite läuft, dieses aber vom Kunden nicht genutzt werden kann. Wenn man es doch versucht, wird das knallhart mit einem 500er Fehler bestraft. Wie man es bei Strato doch hinbekommt, habe ich <a href='http://schnurpsel.de/wordpress-bei-strato/wordpress-permalinks/' title='Wordpress Permalinks'>hier</a> beschrieben.</p>
<p>Für den IIS ist der Ansatz ganz ähnlich. Es wird ein benutzerdefiniertes Fehlerdokument für den Fehler &#8216;404 Not Found&#8217; &#8220;mißbraucht&#8221; und dieses ist einfach die &#8216;index.php&#8217; im Wordpress-Wurzelverzeichnis. Was anderes macht die RewriteEngine praktisch auch nicht, bis auf einen kleinen, aber wichtigen Unterschied. Beim Fehlerdokument wird der Status auf 404 gesetzt, so das der normale Nutzer im Browser zwar keinen Unterschiede sehen würde, denn er bekommt die Seite ganz normal angezeigt. Ein Suchmaschinen-Robot würde die Seite aber wie einen &#8220;Not Found&#8221;-Fehler behandeln und nicht weiter beachten. Deshalb ist das in der Beschreibung genannte Plugin erforderlich, welches den Status wieder ordentlich zurechtbiegt.</p>
<p>Etwas anders liegt die Sache beim IIS. Wenn eine benutzerdefinierte Fehlerseite als URL aufgerufen wird, wird vom Webserver der Status auf &#8216;200 OK&#8217; gesetzte und der Fehlerseite als Parameter der Fehlerstatus und die aufgerufene Seite mitgegeben. Hier ist dann die Fehlerseite dafür zuständig, den Status entsprechend korrekt zu setzen. Eine sehr schöne Vereinfachung gegenüber den Verrenkungen, die bei der Stratolösung nötig sind.<br />
Die einzig wirkliche Aufgabe besteht darin, aus dem übergebenen Parameter die eigenlich aufgerufene URL dem Wordpress als REQUEST_URI unterzujubeln, da daraus dann mit den Permalinkregeln die anzuzeigende Seite ermittlet wird.</p>
<p>Lange Rede, kurzer Sinn, genau das macht mein neues Plugin &#8220;<a href="http://putzlowitsch.de/123-iis-permalink/">123 IIS Permalink</a>&#8220;. Es ermöglich also auch unter IIS die schönen Permalinks ohne dem /index.php/&#8230; Vorspann :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/exoten-51/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress ab 2.1 &#8211; Optionen für die Startseite</title>
		<link>http://schnurpsel.de/wordpress-ab-21-optionen-fur-die-startseite-36/</link>
		<comments>http://schnurpsel.de/wordpress-ab-21-optionen-fur-die-startseite-36/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 16:37:11 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Optionen]]></category>
		<category><![CDATA[Startseite]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-ab-21-optionen-fur-die-startseite-36.html</guid>
		<description><![CDATA[
Ab Wordpress Version 2.1 gibt es die Möglichkeit, als Startseite eine statische Seite anstelle der normalen Blogbeiträge festzulegen.
Dafür gibt es unter &#8216;Einstellungen&#8217;->&#8217;Lesen&#8217; die Optionen für &#8216;Startseite&#8217;:
(&#160;&#160;) Deine letzten Beitäge
(•) Eine statische Seite (unten auswählen)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;• Startseite: [Start&#160;&#160;&#160;&#160;&#160;&#160;[▼]]
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;• Beitragsseite: [Blog&#160;&#160;&#160;&#160;&#160;&#160;[▼]]

Das ist weitestgehend selbsterklärend. Mit &#8216;Eine statische Seite&#8217; aktiviert man die statische Startseite, obwohl die durchaus auch eine gewisse Dynamik haben kann, wie ich das hier beschrieben <a href='http://schnurpsel.de/wordpress-ab-21-optionen-fur-die-startseite-36/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href='http://schnurpsel.de/wp-content/uploads/2007/06/wp-config-lesen-startseite.png' title='Wordpress Einstellungen Lesen Startseite'><img src='http://schnurpsel.de/wp-content/uploads/2007/06/wp-config-lesen-startseite.thumbnail.png' alt='Wordpress Einstellungen Lesen Startseite' /></a><br />
Ab Wordpress Version 2.1 gibt es die Möglichkeit, als Startseite eine statische Seite anstelle der normalen Blogbeiträge festzulegen.<br />
Dafür gibt es unter &#8216;Einstellungen&#8217;->&#8217;Lesen&#8217; die Optionen für &#8216;Startseite&#8217;:</p>
<blockquote><p>(&nbsp;&nbsp;) Deine letzten Beitäge<br />
(•) Eine statische Seite (unten auswählen)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;• Startseite: [Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[▼]]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;• Beitragsseite: [Blog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[▼]]
</p></blockquote>
<p>Das ist weitestgehend selbsterklärend. Mit <em>&#8216;Eine statische Seite&#8217;</em> aktiviert man die statische Startseite, obwohl die durchaus auch eine gewisse Dynamik haben kann, wie ich das <a href='http://schnurpsel.de/letzter-beitrag-als-startseite-33/' title='Letzter Beitrag als Startseite'>hier</a> beschrieben habe. Bei <em>&#8216;Startseite&#8217;</em> wählt man, ja genau, die künftige Startseite aus den bisher erstellten statischen Seiten aus.</p>
<p>Nun möchte man aber bestimmt den Lesern auch die Blogbeiträge in der gewohnten Form präsentieren, und nicht nur auf das Archiv, den Kalender oder die Kategorien verweisen. Genau hier kommt die zweite Auswahlmöglichkeit <em>&#8216;Beitragsseite&#8217;</em> ins Spiel. Am besten man erstellt sich eine weitere Seite und gibt ihr z.B. den Titel &#8220;Blog&#8221;. Diese kann man nun für &#8216;Beitragsseite&#8217; auswählen und fortan wird das Blog wie sonst auf der Startseite auf eben dieser Seite angezeigt, inklusive der Möglichkeit, seitenweise vor- und zurückzublättern.</p>
<p>Ja, feine Sache würde ich sagen, an der Stelle mal ein Lob an die WP-Entwickler. Bin schon auf die Version 2.3 gespannt&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-ab-21-optionen-fur-die-startseite-36/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Letzter Beitrag als Startseite</title>
		<link>http://schnurpsel.de/letzter-beitrag-als-startseite-33/</link>
		<comments>http://schnurpsel.de/letzter-beitrag-als-startseite-33/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 19:17:39 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Startseite]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/letzter-beitrag-als-startseite-33/</guid>
		<description><![CDATA[Ab Wordpress Version 2.1 kann man eine Statische Seite als Startseite festlegen. Mit einem kleinen Trick geht das auch für den aktuellen Beitrag. Als Beispiel will ich hier die Vorgehensweise für das &#8220;Standard DE Theme&#8221;, so wie es leicht modifiziert auch hier verwendet wird, beschreiben.
Zunächst wird eine Kopie der Datei &#8217;single.php&#8217; erstellt und z.B. &#8217;start_page.php&#8217; genannt. In diese wird ganz oben, noch vor &#8220;&#60;?php <a href='http://schnurpsel.de/letzter-beitrag-als-startseite-33/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Ab Wordpress Version 2.1 kann man eine Statische Seite als Startseite festlegen. Mit einem kleinen Trick geht das auch für den aktuellen Beitrag. Als Beispiel will ich hier die Vorgehensweise für das &#8220;Standard DE Theme&#8221;, so wie es leicht modifiziert auch hier verwendet wird, beschreiben.</p>
<p>Zunächst wird eine Kopie der Datei &#8217;single.php&#8217; erstellt und z.B. &#8217;start_page.php&#8217; genannt. In diese wird ganz oben, noch vor <em>&#8220;&lt;?php get_header(); ?>&#8221;</em>  Folgender Quelltext eingefügt:</p>
<pre>&lt;?php
/*
Template Name: Startseite
*/
?>
</pre>
<p>Damit haben wir diese Seite zum Seiten-Template ernannt.<br />
Nun sind noch einige, weitere Änderungen erforderlich. Damit auf der Startseite auch die Sidebar ordentlich dargestellt werden kann, ändern wir gleich nach dem <em>&#8220;&lt;?php get_header(); ?>&#8221;</em> das</p>
<pre>&lt;div id="content" class="widecolumn"></pre>
<p>in</p>
<pre>&lt;div id="content" class="narrowcolumn"></pre>
<p>und fügen direkt danach noch folgendes ein:</p>
<pre>&lt;?php
  query_posts('showposts=1');
?></pre>
<p>Falls wir den in der erstellten Startseite enthaltenen Text z.B. als Willkommenstext ausgeben wollen, kann dazwischen noch folgendes eingefügt werden:</p>
<pre>&lt;div class="post" id="willkommen">
	&lt;div class="entry">
		&lt;?php the_post(); the_content(''); rewind_posts(); ?>
	&lt;/div>
&lt;/div></pre>
<p>Über die ID &#8220;willkommen&#8221; kann dann dieser Text in der style.css noch individuell formatiert werden. Der Klassenname des inneren DIV sollte dem bei den normalen Beiträgen entsprechen. So hat man schonmal eine brauchbare Grundformatierung.</p>
<p>Somit sieht sieht der Anfang unserer &#8217;start_page.php&#8217; dann etwa so aus:</p>
<pre>&lt;?php
/*
Template Name: Startseite
*/
?>
&lt;?php get_header(); ?>

	&lt;div id="content" class="narrowcolumn">
		&lt;div class="post" id="willkommen">
			&lt;div class="entry">
				&lt;?php the_post(); the_content(''); rewind_posts(); ?>
			&lt;/div>
		&lt;/div>

&lt;?php
  query_posts('showposts=1');
?>
  &lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?>

		&lt;div class="navigation"></pre>
<p>Damit die Sidebar auch tatsächlich angezeigt wird, müssen wir den entsprechenden Code get_sidebar() fast ganz am Ende direkt vor get_footer() einfügen. Das sieht dann etwas so aus:</p>
<pre>&lt;?php get_sidebar(); ?>

&lt;?php get_footer(); ?>
</pre>
<p>Nun die Datei speichern und in des Theme-Verzeichnis auf dem Server übertragen.</p>
<p>Jetzt erstellen wir über &#8216;Schreiben&#8217;->&#8217;Seite schreiben&#8217; eine neue statische Seite. Der geben wir als Titel zum Beispiel &#8220;Start&#8221;. Der Inhalt <del datetime="2007-06-14T07:17:13+00:00">darf leer bleiben, den bekomen wir eh nie zu sehen, dafür soll ja der letzte Artikel angezeigt werden</del><ins datetime="2007-06-14T07:17:13+00:00"> kann z.B. einen Willkommenstext enthalten, der vor dem eigentlichen Artikel ausgegeben wird</ins>. Wichtig ist, das wir rechts unter &#8216;Template der Seite&#8217; das gerade erstellte Template &#8220;Start&#8221; auswählen. Nun kann die Seite gespeichert werden und wir wechseln in den Einstellungen-Bereich.</p>
<p>Unter &#8216;Einstellungen&#8217;->&#8217;Lesen&#8217; klicken wir bei &#8216;Startseite&#8217; für &#8216;Anzeige&#8217; die Option</p>
<blockquote><p>(&bull;) Eine statische Seite (unten auswählen)</p></blockquote>
<p>an und wählen die Seite &#8220;Start&#8221; als Startseite aus:</p>
<blockquote><p>Startseite: [Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[▼]]</p></blockquote>
<p>Nun die [Einstellungen aktualisieren] und falls ich nichts vergessen hab, ist der aktuelle Beitrag nun die Startseite</p>
<p>Mal gucken, ob es geklappt hat&#8230;</p>
<p>Nachtrag: Ja, scheint zu funktionieren :-) Große Freude!</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/letzter-beitrag-als-startseite-33/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
	</channel>
</rss>
