Archive for the ‘htaccess’ tag
Subdomain-Service: Wie erstelle ich dynamisch viele Subdomains?
Was eine Subdomain ist brauche ich ja wahrscheinlich nicht zu erzählen, dass es manchmal mehr Sinn machen kann lieber eine neue Subdomain als einen Unterordner anzulegen und wie das geht möchte ich hier zeigen.
Die Länge der folgenden Domains ist gleich, es ist also egal ob ich
http://domain.de/forum
oder
http://forum.domain.de
anlege. Es gibt jedoch einige technische Unterschiede. Sollte ich beispielsweise später das Forum auf einen eigenen Server umziehen wollen ist das mit der zweiten Möglichkeit einfacher. Des weiteren sind die Sessions durch die Subdomain getrennt, ich kann also im Forum nicht auf die Session-Daten der Hauptdomain zugreifen und andersrum. Sollte ich das doch wollen müßte ich
ini_set("session.cookie_domain", ".domain.de");
die Einstellung ändern, dann teilen sich alle Subdomains die Session-Daten.
Weiterlesen »
PHP und HTTP AUTH bei 1und1 Webhosting
Um das Zend Framework in der Webhosting-Umgebung bei 1und1 ans Laufen zu bekommen, gibt es ein paar Kleinigkeiten zu beachten:
Als erstes muss man bei 1und1 in der .htaccess-Datei angeben welche PHP-Version man benutzen möchte. Dies macht man mit der Zeile
AddType x-mapp-php5 .php
Außerdem muß man noch die folgenden 2 Zeilen hinzufügen, sonst erhält man einen 500er Fehler:
Options -MultiViews RewriteBase /
Die RewriteBase gilt es natürlich anzupassen falls das Projekt über einen anderen Pfad erreicht werden muss.
Da PHP bei 1und1 als CGI läuft, muß man für die HTTP-Authentifizierung auch noch einen kleinen Workaround einbauen:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Damit wird die Authentifizierungsinformation in die Variable $_SERVER[‚REDIRECT_HTTP_AUTHORIZATION‘] geschrieben. Das sieht dann ungefähr so aus:
echo $_SERVER['REDIRECT_HTTP_AUTHORIZATION']; // Basic: d2lraTpwZWRpYQ==
Das ist die Base64-Darstellung von „Username:Passwort“.
Die entgültige .htaccess sieht dann so aus:
AddType x-mapp-php5 .php Options -MultiViews RewriteEngine On RewriteBase / # workaround for 1und1 php cgi mode RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
Und so kommt man an Username + Passwort heran:
if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) { list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6))); }
Blog URL Struktur geändert
So, nun habe ich etwas Zeit gehabt und auf die suchmaschinenfreundliche URL-Struktur umgestellt. Vorher hatte ich umgestellt auf /%post_id% , sodass Artikel unter
https://www.phpgangsta.de/630
verfügbar waren. Das war primär dafür gemacht, dass ich diese kurzen URLs in Twitter nutzen kann, da ich Short-URL-Dienste hasse (man weiß nie was dahinter versteckt ist).
Nun habe ich die Struktur umgestellt auf /%postname% , sodass der selbe Artikel nun standardmäßig so verlinkt ist:
ABER: Da ich die kurzen URLs nicht verlieren wollte (und die Links in Google/Twitter weiterhin funktionieren sollen) habe ich meine .htaccess noch angepasst, sodass ich nun beide Formate nutzen kann. In Twitter kann ich also weiterhin meine geliebten Kurz-URLs nutzen, im Blog wird allerdings der Postname genutzt. Meine .htaccess sieht nun so aus:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^([0-9]+)$ /?p=$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
Falls also in der URL nur Zahlen vorkommen, sende ich einen „301 Permanent Redirect“ auf die URL ?p=<id> , diese URL wandelt WordPress dann nochmals um und leitet auf die URL mit dem Postnamen um. In Google sollten nun also bald die Artikel nur noch mit dem Postnamen erscheinen und die ID-URLs bald verschwinden. Ich bin gespannt, ob das so klappt.
Um nur einen 301 Redirect zu nutzen hätte ich ein kleines Script schreiben müssen, welches aus einer ID die Postname-URL herausfindet (Datenbank?) und dann redirected. Ob das einfach ist und vor allem bei zukünftigen WordPress-Updates noch funktioniert würde ich bezweifeln, und soweit ich weiß sind 2 Redirects kein Problem, oder hat jemand andere Informationen?
Jedenfalls funktioniert es nun so wie ich möchte, und Google werde ich in den nächsten Tagen mal beobachten.