2016-05-31 7 views
0
  • ich in der Lage bin zu Sub-Domain-Variablen (Produktname und Sprache) mit PHP über $ _SERVER [ "HTTP_HOST"]

http://product.en.example.comMod Rewrite Wilcard Sub-Domäne - Interne Seiten

Ich weiß nicht zu bekommen wie man in Browser diese URLs für interne Seiten zu arbeiten:

  • product.en.example.com/images
  • product.en.example.com/images/john
  • product.en.example.com/hobbies
  • product.en.example.com/hobbies/smith

Bilder, Hobby =

pagetype

john, smith = peopleName

ich glaube, ich den Seitentyp über php Query-Strings (GET) und dient dazu, das entsprechende Layout bekommen sollte. i

In .htaccess haben:

RewriteEngine On 

RewriteCond %{HTTP_HOST} !^www\. 
RewriteCond %{REQUEST_URI} !index\.php 
RewriteCond %{HTTP_HOST} ^(.+?)\.(.+?)\.example\.com/$ 
RewriteRule (.+).(.+)\.example\.com\/(.*) /index.php [L] 

Antwort

0

es mehrere Möglichkeiten, dies zu erreichen. Zuallererst können Sie die Anfrage uri in PHP mit $_SERVER['REQUEST_URI'] parsen, die den angeforderten URI enthält.

Eine Alternative ist, Ihre .htaccess Datei zu verwenden. In diesem Fall würden Sie nicht einmal den Namen des Servers in PHP analysieren müssen:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{HTTP_HOST} ^(.*?)\.?([^\.]+?)\.example\.com$ 
RewriteRule ^([^/]*)?/?(.*?)/?$ /index.php?product=%1&language=%2&pageType=$1&peopleName=$2 [L] 

Bitte beachte, dass ich die Regel hinzugefügt RewriteCond %{REQUEST_FILENAME} !-f anstelle des Schecks gegen index.php denn auf diese Weise können Sie sie Vermögenswerte wie Ihre CSS-Dateien, ohne dass dienen kann in index.php umgeleitet.

Beachten Sie, dass HTTP_HOST keinen abschließenden Schrägstrich hat.

EDIT

Wie in den Kommentaren requirested:

Um können Sie ([^/]*)?/? verwenden Sie einen anderen optional Parameter hinzuzufügen. Daher könnte die RewriteRule wie aussehen:

RewriteRule ^([^/]*)?/?([^/]*)?/?(.*?)/?$ /index.php?product=%1&language=%2&pageType=$1&peopleName=$2&peopleAge=$3 [L] 
+0

Es scheint zu funktionieren, wie gewünscht. Ich habe vergessen, dass ich auch einige URLs zu Kategorien ohne ersten Parameter (Produkt) habe. Ich habe versucht, den Punkt fakultativ zu machen. vor der Sprache \.? oder (\.)? aber diese URL gibt 404.thanks en.example.com/cat/catName – AndreiD

+0

Ich habe meine Antwort aktualisiert, um Ihre neuen Anforderungen zu reflektieren. –

+0

Funktioniert gut. Ich versuche, am Ende einen weiteren optionalen Parameter hinzuzufügen, der jedoch nicht in der Abfragezeichenfolge angezeigt wird. Vielleicht werde ich URLs mit ein paar weiteren Parametern haben. Ich probierte diese RewriteRule^([^ /] *)? /? (. *?)/(. *?)? /? $ /index.php?product=%1&language=%2&pageType=$1&peopleName=$2&peopleAge=$3 [L] – AndreiD