2010-08-16 5 views
3

J'utilise htaccess avec un ensemble de règles pour contrôler les différentes pages de mon site Web.Règles de sous-domaine Htaccess

  1. Si un utilisateur visite mon site principal (domain.com), sans utiliser www 301 redirige vers www.domain.com (à des fins de référencement)
  2. J'utilise des sous-domaines génériques, donc si un utilisateur visite sous-domaine .domain.com, ils vont voir un fichier PHP spécifique qui décide de se contenter d'eux.

Mon problème est que je voudrais étendre ma configuration, pour pouvoir utiliser les mêmes noms d'URL. Par exemple, si je visite subdomain.domain.com/feed, je vais voir le fichier pages/public_news_feed.php de la règle du domaine principal, car il a partagé la règle "/ feed". Ce que je voulais vraiment être servi est pages/public_subdomain_blog_feed.php!

Comment puis-je configurer des règles spécifiques pour domain.com et subdomain.domain.com?

Merci d'avance et bonne journée!

#AuthName "Restricted Area" 
#AuthType Basic 
#AuthUserFile /var/www/user/data/www/domain.com/.htpasswd 
#require valid-user 

Options +FollowSymLinks 
RewriteEngine on 

#force domain setup to use www 
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L] 

#redirect subdomains to controller 
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC] 
RewriteRule ^$ pages/public_subdomain_blog.php [L,QSA] 

RewriteCond %{REQUEST_URI} !-f 
RewriteRule ^(indsend-nyhed)$   pages/public_submit_news.php [L] 
RewriteRule ^(modeblogs)$    pages/public_blogs.php [L] 
RewriteRule ^(nyheder)$    pages/public_news.php [L] 
RewriteRule ^(feed)$     pages/public_news_feed.php [L] 
RewriteRule ^(nyheder)/([0-9]*)/(.*)$  pages/public_news_single.php?n_id=$2 [L] 
RewriteRule ^(kontrolpanel)$    pages/private_account.php [L,QSA] 
RewriteRule ^(kontrolpanel)/(logud)$   pages/private_logout.php [L] 


## THESE RULES SHOULD ONLY BE SET IF THE USERS IS ON A SUBDOMAIN 
RewriteRule ^([0-9]*)/(.*)$   pages/public_subdomain_blog_article.php?p_id=$1 [L] 
RewriteRule ^(kategori)/([0-9]*)$  pages/public_subdomain_blog.php?c_id=$2 [L] 
RewriteRule ^(arkiv)/([0-9]*)$  pages/public_subdomain_blog.php?a_id=$2 [L] 
RewriteRule ^(feed)$    pages/public_subdomain_blog_feed.php [L] 
+0

Pourquoi vous allez être redirigé les visiteurs à l'URL www? – derekerdmann

+0

Depuis les liens entrants vers domain.com ne donne pas de lien pour www.domain.com. Cependant les gens choisissent de former leurs liens, avec ou sans www alors je conserve tout le linkjice, éventuellement transformé en relations publiques. – Kristian

Répondre

2

Eh bien, vous savez déjà comment conditionner si l'utilisateur se trouve sur un sous-domaine, puisque vous le faites pour votre contrôleur déjà:

RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC] 
RewriteRule ^$ pages/public_subdomain_blog.php [L,QSA] 

Bien qu'il peut ou peut ne pas être possible de simplifier l'ensemble de votre ensemble de règles, la chose la plus facile à faire est de simplement conditionner vos règles de la même manière. Étant donné que vous avez moins de règles de sous-domaines, nous pouvons déplacer les dessus de vos principales règles du site et appliquer les réécritures sous conditions, en utilisant la condition que vous avez:

## THESE RULES SHOULD ONLY BE SET IF THE USERS IS ON A SUBDOMAIN 
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC] 
RewriteRule ^([0-9]*)/(.*)$  pages/public_subdomain_blog_article.php?p_id=$1 [L] 
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC] 
RewriteRule ^(kategori)/([0-9]*)$ pages/public_subdomain_blog.php?c_id=$2 [L] 
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC] 
RewriteRule ^(arkiv)/([0-9]*)$ pages/public_subdomain_blog.php?a_id=$2 [L] 
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC] 
RewriteRule ^(feed)$    pages/public_subdomain_blog_feed.php [L] 

RewriteCond %{REQUEST_URI} !-f 
RewriteRule ^(indsend-nyhed)$   pages/public_submit_news.php [L] 
RewriteRule ^(modeblogs)$    pages/public_blogs.php [L] 
RewriteRule ^(nyheder)$    pages/public_news.php [L] 
RewriteRule ^(feed)$     pages/public_news_feed.php [L] 
RewriteRule ^(nyheder)/([0-9]*)/(.*)$ pages/public_news_single.php?n_id=$2 [L] 
RewriteRule ^(kontrolpanel)$   pages/private_account.php [L,QSA] 
RewriteRule ^(kontrolpanel)/(logud)$ pages/private_logout.php [L] 
+0

Je cherchais une façon de faire comme une déclaration if pour entourer toutes les règles. Bien que je sois stupide depuis RewriteCond obtenir le travail. Merci! – Kristian

+0

@kris - Oui, c'est logique. Il n'est généralement pas très facile de définir quelque chose comme ça quand vos règles ne sont pas liées (ne dépendez pas les unes des autres), car 'mod_rewrite' ne fournit pas les structures de contrôle nécessaires. En haut de ma tête, vous pouvez faire quelques trucs hackish avec 'RewriteCond' pour condenser les choses un peu, mais c'est plus désordonné que ça en vaut la peine dans ce cas je pense. –

+0

Je vais suivre votre exemple. Merci encore. – Kristian

Questions connexes