Правила поддомена Htaccess

Я использую htaccess с набором правил для управления различными страницами моего сайта.

  1. Если пользователь заходит на мой основной сайт (domain.com), без использования www он 301 перенаправляет на www.domain.com (для целей SEO)
  2. Я использую субдомены с подстановочными знаками, поэтому, если пользователь заходит на subdomain.domain.com, он просматривает определенный файл PHP, который решает, какое содержимое для него.

Моя проблема в том, что я хотел бы расширить мои настройки, чтобы иметь возможность использовать те же имена URL. В качестве примера, если я зайду на subdomain.domain.com/feed, я увижу файл pages / public_news_feed.php из правила основного домена, поскольку он разделяет правило "/feed". То, что я действительно хотел, чтобы меня обслужили, это pages/public_subdomain_blog_feed.php!

Как я могу установить определенные правила для domain.com и subdomain.domain.com?

Заранее спасибо и хорошего дня!

#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]

1 ответ

Решение

Ну, вы уже знаете, как определить, находится ли пользователь на поддомене, поскольку вы уже делаете это для своего контроллера:

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

Хотя может быть, а может и не быть возможно немного упростить весь набор правил, самое простое, что можно сделать, это просто подготовить ваши правила таким же образом. Поскольку у вас меньше правил для поддоменов, мы можем переместить их выше правил основного сайта и условно применить изменения, используя следующее условие:

## 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]
Другие вопросы по тегам