<?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>PHP Gangsta - Der PHP Blog mit Praxisbezug &#187; htaccess</title> <atom:link href="http://www.phpgangsta.de/tag/htaccess/feed" rel="self" type="application/rss+xml" /><link>http://www.phpgangsta.de</link> <description>Ein PHP Blog mit Themen aller Art. Manchmal vergewaltige ich PHP...</description> <lastBuildDate>Thu, 02 Feb 2012 22:22:51 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Subdomain-Service: Wie erstelle ich dynamisch viele Subdomains?</title><link>http://www.phpgangsta.de/subdomain-service-wie-erstelle-ich-dynamisch-viele-subdomains</link> <comments>http://www.phpgangsta.de/subdomain-service-wie-erstelle-ich-dynamisch-viele-subdomains#comments</comments> <pubDate>Tue, 04 Jan 2011 09:09:58 +0000</pubDate> <dc:creator>Michael Kliewe</dc:creator> <category><![CDATA[PHP]]></category> <category><![CDATA[Server-Software]]></category> <category><![CDATA[apache]]></category> <category><![CDATA[htaccess]]></category> <category><![CDATA[Subdomain]]></category> <category><![CDATA[Subdomain-Dienst]]></category> <category><![CDATA[Subdomain-Script]]></category> <category><![CDATA[Subdomain-Service]]></category><guid isPermaLink="false">http://www.phpgangsta.de/?p=2044</guid> <description><![CDATA[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 [...]<br/><br/> Ähnliche Artikel:<ol><li><a href='http://www.phpgangsta.de/co-de-domain' rel='bookmark' title='co.de Domain'>co.de Domain</a></li><li><a href='http://www.phpgangsta.de/wie-erstelle-ich-einen-socket-server-in-php' rel='bookmark' title='Wie erstelle ich einen Socket-Server in PHP?'>Wie erstelle ich einen Socket-Server in PHP?</a></li></ol>]]></description> <content:encoded><![CDATA[<p>Was eine <a href="http://de.wikipedia.org/wiki/Subdomain#Subdomain" target="_blank">Subdomain</a> 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.</p><p>Die Länge der folgenden Domains ist gleich, es ist also egal ob ich</p><p>http://domain.de/forum</p><p>oder</p><p>http://forum.domain.de</p><p>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</p><pre class="brush: php; title: ; notranslate">ini_set(&quot;session.cookie_domain&quot;, &quot;.domain.de&quot;);</pre><p>die Einstellung ändern, dann teilen sich alle Subdomains die Session-Daten.<br /> <span id="more-2044"></span><br /> Solange wir nur einige wenige Subdomains für Forum, Blog und Webseite erstellen möchten tun wir das normalerweise manuell direkt in den DNS-Einstellungen, und wir fügen im Apache einen entsprechenden VirtualHost Eintrag hinzu, beispielsweise</p><pre class="brush: plain; title: ; notranslate">NameVirtualHost *:80

&lt;VirtualHost *:80&gt;
    DocumentRoot /www/forum
    ServerName forum.domain.de
    ...
&lt;/VirtualHost&gt;

&lt;VirtualHost *:80&gt;
    DocumentRoot /www/blog
    ServerName blog.domain.de
    ...
&lt;/VirtualHost&gt;</pre><p>Ich habe nun die Domain <a href="http://ipv6only.de" target="_blank">ipv6only.de</a>, unter der ich einen Subdomain-Dienst anbieten möchte für Webseiten, die nur via IPv6 zu erreichen sind. Dabei gibt es verschiedene Möglichkeiten, wobei ich vorerst mit einer Weiterleitung anfangen möchte und eventuell einer &#8220;Frameweiterleitung&#8221;. Jemand kann sich also registrieren, beispielsweise die Subdomain <a href="http://simon.ipv6only.de" target="_blank">simon.ipv6only.de</a> , und dann diese Subdomain weiterleiten auf die nicht so gut merkbare IPv6-Adresse <a href="http://[2001:0db8:85a3:08d3:1319:8a2e:0370]/" target="_blank">http://[2001:0db8:85a3:08d3:1319:8a2e:0370]/</a> oder zum Beispiel auf <a href="http://hosterxy.com/user/simon245/" target="_blank">http://hosterxy.com/user/simon245/</a></p><p>Wie geht das nun? Wir richten als erstes einen Wildcard-Eintrag im DNS ein, hier die 6. Zeile mit dem Sternchen (für IPv6 wäre es dann ein AAAA Eintrag):</p><p><img class="alignnone size-full wp-image-2045" title="wildcardsubdomain" src="http://www.phpgangsta.de/wp-content/uploads/wildcardsubdomain.png" alt="" width="629" height="245" /></p><p>Dadurch werden schonmal alle Subdomains auf meinen Webserver 85.214.28.26 geleitet. Dort erstelle ich dann auch einen entsprechenden Wildcard-Eintrag im Apache:</p><pre class="brush: plain; title: ; notranslate">&lt;VirtualHost 85.214.28.26:80&gt;
    ServerName ipv6only.de
    ServerAlias *.ipv6only.de
    DocumentRoot /www/ipv6only
 &lt;/VirtualHost&gt;</pre><p>Nun landen also alle Subdomains im Verzeichnis /www/ipv6only . Soweit so gut, nun können wir mit Hilfe von PHP  für jede Subdomain die entsprechende Weiterleitung herausfinden, beispielsweise aus einer Datenbank.</p><pre class="brush: php; title: ; notranslate">&lt;?
$domain = strtolower($_SERVER['SERVER_NAME']);

// in $subdomain we want to have &quot;simon&quot; or &quot;forum.simon&quot;
$position = strrpos($domain, '.ipv6only.de');
$subdomain = substr($domain, 0, $position);

// get the target url for the subdomain
$row = $dbmodel-&gt;fetchRow(array('subdomain' =&gt; $subdomain));

header(&quot;Location: &quot;.$row['TargetUrl'], true, 301); ?&gt;
You are being redirected to &lt;a href=&quot;&lt;?=$row['TargetUrl']?&gt;&quot;&gt;&lt;?=$row['TargetUrl']?&gt;&lt;/a&gt;</pre><p>Bei einer Frameweiterleitung bleibt die *.ipv6only.de Adresse in der URL stehen, da die Zielseite nur in einem Frame angezeigt wird. Das geht beispielsweise so:</p><pre class="brush: php; title: ; notranslate">&lt;?
$domain = strtolower($_SERVER['SERVER_NAME']);

// in $subdomain we want to have &quot;simon&quot; or &quot;forum.simon&quot;
$position = strrpos($domain, '.ipv6only.de');
$subdomain = substr($domain, 0, $position);

// get the target url for the subdomain
$row = $dbmodel-&gt;fetchRow(array('subdomain' =&gt; $subdomain));

if ($row['Type'] == 'Frame') { ?&gt;
    &lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Frameset//EN&quot; &quot;http://www.w3.org/TR/html4/frameset.dtd&quot;&gt;
    &lt;html&gt;
        &lt;head&gt;
            &lt;title&gt;&lt;?=$domain ?&gt;&lt;/title&gt;
        &lt;/head&gt;
        &lt;frameset&gt;
          &lt;frame src=&quot;&lt;?=$row['TargetUrl']?&gt;&quot;&gt;
        &lt;/frameset&gt;
    &lt;/html&gt;
&lt;?
} elseif ($row['Type'] == 'Forward') {
    header(&quot;Location: &quot;.$row['TargetUrl'], true, 301); ?&gt;
    You are being redirected to &lt;a href=&quot;&lt;?=$row['TargetUrl']?&gt;&quot;&gt;&lt;?=$row['TargetUrl']?&gt;&lt;/a&gt;
&lt;?
}</pre><p>Anstatt dies alles mit PHP zu machen könnte man sich auch eine  Umsetzung mit mod_rewrite vorstellen, allerdings ist man damit nicht so  flexibel. Für jede Weiterleitung würde also eine entsprechende Regel in der .htaccess stehen:</p><pre class="brush: plain; title: ; notranslate">RewriteEngine On
RewriteCond %{HTTP_HOST} ^simon\.ipv6only\.de$ [NC]
RewriteRule ^(.*) http://hosterxy.com/user/simon245 [R=301,L]</pre><p>Die .htaccess-Datei würde auch recht groß bei vielen Tausend  Einträgen, das Editieren würde komplexer (wenn jemand die Ziel-URL ändert müßte die .htaccess Datei neu generiert werden), und spätestens bei der &#8220;Frameweiterleitung&#8221; wäre PHP auf jeden Fall nötig.</p><p>Wie hättet ihr es gemacht, hat jemand bereits Erfahrungen mit solchen Diensten? Bei der Recherche bin ich auch auf einige &#8220;Subdomain-Service-Scripte&#8221; gestossen, die man für 19€ oder 99€ kaufen kann. Weiß jemand was genau diese Scripte bieten außer ein paar Formulare zum Administrieren der Datenbank (Registrierung, Weiterleitungstyp, Ziel-URL etc.) und der oben gezeigten Funktionalität?</p> <br/><br/><p>Ähnliche Artikel:</p><ol><li><a href='http://www.phpgangsta.de/co-de-domain' rel='bookmark' title='co.de Domain'>co.de Domain</a></li><li><a href='http://www.phpgangsta.de/wie-erstelle-ich-einen-socket-server-in-php' rel='bookmark' title='Wie erstelle ich einen Socket-Server in PHP?'>Wie erstelle ich einen Socket-Server in PHP?</a></li></ol>]]></content:encoded> <wfw:commentRss>http://www.phpgangsta.de/subdomain-service-wie-erstelle-ich-dynamisch-viele-subdomains/feed</wfw:commentRss> <slash:comments>9</slash:comments> </item> <item><title>PHP und HTTP AUTH bei 1und1 Webhosting</title><link>http://www.phpgangsta.de/php-und-http-auth-bei-1und1-webhosting</link> <comments>http://www.phpgangsta.de/php-und-http-auth-bei-1und1-webhosting#comments</comments> <pubDate>Sat, 06 Feb 2010 09:53:47 +0000</pubDate> <dc:creator>Michael Kliewe</dc:creator> <category><![CDATA[Allgemein]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[1und1 Webhosting]]></category> <category><![CDATA[htaccess]]></category> <category><![CDATA[HTTP Authorization]]></category> <category><![CDATA[PHP_AUTH_PW]]></category> <category><![CDATA[PHP_AUTH_USER]]></category> <category><![CDATA[x-mapp-php5]]></category><guid isPermaLink="false">http://www.phpgangsta.de/?p=891</guid> <description><![CDATA[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 Außerdem muß man noch die folgenden 2 Zeilen hinzufügen, sonst erhält man einen 500er [...]<br/><br/> Ähnliche Artikel:<ol><li><a href='http://www.phpgangsta.de/blog-url-struktur-geandert' rel='bookmark' title='Blog URL Struktur geändert'>Blog URL Struktur geändert</a></li></ol>]]></description> <content:encoded><![CDATA[<p>Um das <a href="http://framework.zend.com/" target="_blank">Zend Framework</a> in der Webhosting-Umgebung bei 1und1 ans Laufen zu bekommen, gibt es ein paar Kleinigkeiten zu beachten:</p><p>Als erstes muss man bei 1und1 in der <a href="http://de.wikipedia.org/wiki/.htaccess" target="_blank">.htaccess-Datei</a> angeben <a href="http://faq.1and1.com/scripting_languages_supported/php/9.html" target="_blank">welche PHP-Version man benutzen möchte</a>. Dies macht man mit der Zeile</p><pre class="brush: plain; title: ; notranslate">AddType x-mapp-php5 .php</pre><p>Außerdem muß man noch die folgenden 2 Zeilen hinzufügen, sonst erhält man einen 500er Fehler:</p><pre class="brush: plain; title: ; notranslate">Options -MultiViews
RewriteBase /</pre><p>Die RewriteBase gilt es natürlich anzupassen falls das Projekt über einen anderen Pfad erreicht werden muss.</p><p>Da PHP bei 1und1 als CGI läuft, muß man für die <a href="http://de.wikipedia.org/wiki/HTTP-Authentifizierung" target="_blank">HTTP-Authentifizierung</a> auch noch einen kleinen Workaround einbauen:</p><pre class="brush: plain; title: ; notranslate">RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]</pre><p>Damit wird die Authentifizierungsinformation in die Variable $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] geschrieben. Das sieht dann ungefähr so aus:</p><pre class="brush: plain; title: ; notranslate">echo $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
//  Basic: d2lraTpwZWRpYQ==</pre><p>Das ist die Base64-Darstellung von &#8220;Username:Passwort&#8221;.</p><p>Die entgültige .htaccess sieht dann so aus:</p><pre class="brush: plain; title: ; notranslate">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]</pre><p>Und so kommt man an Username + Passwort heran:</p><pre class="brush: php; title: ; notranslate">if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
 list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6)));
}</pre><br/><br/><p>Ähnliche Artikel:</p><ol><li><a href='http://www.phpgangsta.de/blog-url-struktur-geandert' rel='bookmark' title='Blog URL Struktur geändert'>Blog URL Struktur geändert</a></li></ol>]]></content:encoded> <wfw:commentRss>http://www.phpgangsta.de/php-und-http-auth-bei-1und1-webhosting/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Blog URL Struktur geändert</title><link>http://www.phpgangsta.de/blog-url-struktur-geandert</link> <comments>http://www.phpgangsta.de/blog-url-struktur-geandert#comments</comments> <pubDate>Sun, 29 Nov 2009 00:36:15 +0000</pubDate> <dc:creator>Michael Kliewe</dc:creator> <category><![CDATA[Allgemein]]></category> <category><![CDATA[htaccess]]></category> <category><![CDATA[redirect]]></category> <category><![CDATA[SEO]]></category> <category><![CDATA[wordpress]]></category><guid isPermaLink="false">http://www.phpgangsta.de/?p=641</guid> <description><![CDATA[So, nun habe ich etwas Zeit gehabt und auf die suchmaschinenfreundliche URL-Struktur umgestellt. Vorher hatte ich umgestellt auf /%post_id% , sodass Artikel unter http://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 [...]<br/><br/> Keine ähnlichen Artikel.]]></description> <content:encoded><![CDATA[<p>So, nun habe ich etwas Zeit gehabt und auf die suchmaschinenfreundliche URL-Struktur umgestellt. Vorher hatte ich umgestellt auf /%post_id% , sodass Artikel unter</p><p>http://www.phpgangsta.de/630</p><p>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).</p><p>Nun habe ich die Struktur umgestellt auf /%postname% , sodass der selbe Artikel nun standardmäßig so verlinkt ist:</p><p>http://www.phpgangsta.de/taugt-zend_queue-etwas</p><p>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:</p><pre class="brush: plain; title: ; notranslate">&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteBase /

RewriteRule ^([0-9]+)$ /?p=$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
&lt;/IfModule&gt;</pre><p>Falls also in der URL nur Zahlen vorkommen, sende ich einen &#8220;301 Permanent Redirect&#8221; auf die URL ?p=&lt;id&gt; , 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.</p><p>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?</p><p>Jedenfalls funktioniert es nun so wie ich möchte, und Google werde ich in den nächsten Tagen mal beobachten.</p> <br/><br/><p>Keine ähnlichen Artikel.</p>]]></content:encoded> <wfw:commentRss>http://www.phpgangsta.de/blog-url-struktur-geandert/feed</wfw:commentRss> <slash:comments>19</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: basic
Database Caching 1/35 queries in 0.104 seconds using disk: basic
Object Caching 1094/1156 objects using disk: basic

Served from: www.phpgangsta.de @ 2012-02-08 01:17:47 -->
