2009-06-29 4 views
2

Je suis en train de mettre en œuvre une solution en utilisant .htaccess et sous-domaines génériques de telle sorte queWildcard Subdomains .htaccess

http://subdomain.example.com est mis en correspondance http://example.com/index.php/accounts/subdomain/. Mes règles ressemblent à quelque chose comme:

RewriteCond %{HTTP_HOST} !www.example.com [NC] 
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).example.com [NC] 
RewriteRule ^(.*/) /index.php [PT,L] 

Qui fonctionne, mais ne tient pas compte de tout le reste. Lorsque j'essaie d'ajouter quoi que ce soit à la règle, par exemple:

RewriteRule ^(.*/) /index.php/hello [PT,L] 

Je reçois une erreur 500 interne au serveur. Comment puis-je obtenir ce travail?

Répondre

3

Vous devez probablement exclure la index.php de votre règle:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com$ [NC] 
RewriteRule !^index\.php($|/) index.php/accounts/%2%{REQUEST_URI} [PT,L] 
+0

Merci, j'ai utilisé autre chose (-f et -d), mais cela fonctionne aussi, donc je vais le classer pour référence future. – Zahymaka

1

Essayez de changer RewriteRule à

RewriteRule ^/(.*)$ /index.php/accounts/%1/$1 [PT] 

Cela va réécrire l'URL qui inclut le sous-domaine et l'URI demande initiale.

EDIT: peut-être qu'il a besoin d'être

RewriteRule ^(.*)$ /index.php/accounts/%1/$1 [PT] 

comme mentionné dans les commentaires.

+0

J'ai essayé, mais il ne semble pas être mise à feu, même quand je change index.php à autre chose. – Zahymaka

+0

Oh ... peut-être que vous devez utiliser le motif^(. *) $ (Pas de barre oblique) quand il est dans .htaccess. (Pour ce que ça vaut, je vous recommande de mettre ces directives dans le fichier de configuration du serveur principal si vous le pouvez.) –

+0

Voir ci-dessous. Merci pour votre aide! – Zahymaka

1

Ceci est une adaptation du code que j'utilise pour rediriger des sous-domaines sur mon propre site. Je ne prétends pas que ce soit la meilleure pratique, mais cela fonctionne;

RewriteCond %{HTTP_HOST} ^(.*)\.com$ [NC] 
RewriteCond %1 !^(www)\.example$ [NC] 
RewriteRule ^.*$ http://www.example.com/index.php/accounts/%1/ [R=301,L] 
+0

Cela fonctionne, mais je ne souhaite pas rediriger les utilisateurs sur le site. Merci tout de même. – Zahymaka

+0

Je ne suis pas en mesure de le tester maintenant, mais cela ne fonctionnerait-il pas de la même manière en remplaçant [R = 301, L] par [PT, L]? – Mathew