Правила поддомена Htaccess
Я использую htaccess с набором правил для управления различными страницами моего сайта.
- Если пользователь заходит на мой основной сайт (domain.com), без использования www он 301 перенаправляет на www.domain.com (для целей SEO)
- Я использую субдомены с подстановочными знаками, поэтому, если пользователь заходит на 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]