2015-05-05 4 views
0

Я хочу, чтобы все адреса сайта принадлежат корневой domain.com даже активы, и только категории в поддоменов.htaccess переписывает для субдомена

пример

domain.com/ 
domain.com/join.php 
domain.com/admin/ 
games.domain.com/ 
games.domain.com/arcade/ 
games.domain.com/arcade/10.html 

каждый из эти URL взять из ===

domain.com/ === index.php 
domain.com/join.php === join.php 
domain.com/admin/ === /admin/ 
games.domain.com/ === main_categories.php?slug=games 
games.domain.com/arcade/ === sub_categories.php?slug=games&cat=arcade 
games.domain.com/arcade/10.html === view.php?slug=games&cat=arcade&id=10 

у меня есть этот код, но его не работает

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.domain.com 
RewriteCond %{HTTP_HOST} ([a-zA-Z0-9-]+)\.domain.com 
RewriteRule .* - [S=3] 
RewriteRule ^(.*)$ main_categories.php?prefix=%1 
RewriteRule ^([A-Za-z0-9-]+)/?((index|news|photos|videos|articles)\.html)?$ sub_categories.php?prefix=$1&type=$3 [QSA,L] 
RewriteRule ^([A-Za-z0-9-]+)/([0-9-]+)/?(.*)?.html$ view.php?prefix=$1&id=$2&title=$3 [QSA,L] 
+1

Вы должны использовать архитектуру MVC. Не должно быть объектно-ориентированным. – Aviz

+0

его слишком поздно для этого, приложение уже bult –

+1

Вы сказали: «Я хочу, чтобы ** все URL-адреса сайта принадлежали корневому домену». Как apache узнает разницу между тем, что вы считаете категорией, и тем, что не является категорией? Вам нужно будет сузить это и исключить определенные URI, тогда будет легче создать правила. –

ответ

1

Если я понимаю вас. Во-первых, вам нужно будет обновить конфигурацию Apache или виртуальный хост ServerAlias, чтобы включить любые поддомены *.example.com, на которые вы хотите ответить Apache. Вероятно, вам нужно будет сделать запись поддомена поддомена DNS, чтобы он знал, куда отправить запрос, когда кто-то вводит в games.example.com.

Тогда вам необходимо будет сделать правило, чтобы исключить www и non-www, используя следующие правила.

#games.domain.com/ === main_categories.php?slug=games 
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ [NC] 
RewriteCond %{HTTP_HOST} ([a-zA-Z0-9-]+)\.example\.com$ [NC] 
RewriteRule^main_categories.php?slug=%1 [L,QSA] 

#games.domain.com/arcade/ === sub_categories.php?slug=games&cat=arcade 
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ [NC] 
RewriteCond %{HTTP_HOST} ([a-zA-Z0-9-]+)\.example\.com$ [NC] 
RewriteRule ^([^/]+)/?$ sub_categories.php?slug=%1&cat=$1 [L,QSA] 

#games.domain.com/arcade/10.html === view.php?slug=games&cat=arcade&id=10 
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ [NC] 
RewriteCond %{HTTP_HOST} ([a-zA-Z0-9-]+)\.example\.com$ [NC] 
RewriteRule ^([^/]+)/([^/]+)\.html$ view.php?slug=%1&cat=$1&id=$2 [L,QSA] 
+0

его не сработал, но кажется хорошим, но я думаю, что есть некоторые ошибки, такие как (пример \ com) где точка? –

+0

Я исправил синтаксис, но он все еще может не работать, если вы не обновили Apache и Dns. –

+0

Я использую некоторую конфигурацию, и localhost читает субдомены, но не работает –

2

RewriteEngine На

RewriteCond %{HTTP_HOST} ^(.+).domain.ru$ 
RewriteRule ^(.+)/(.+)\.html$ /view.php?slug=%1&cat=$1&id=$2 [L] 
RewriteCond %{HTTP_HOST} ^(.+).domain.ru$ 
RewriteRule ^(.+)/$ /sub_categories.php?slug=%1&cat=$1 [L] 
RewriteCond %{HTTP_HOST} ^(.+).domain.ru$ 
RewriteRule ^$ /main_categories.php?slug=%1 [L] 

Если конфигурация Apache не делает это для вас, добавьте

RewriteCond %{HTTP_HOST} ^domain.com$ 
RewriteRule ^$ /index.php 
+0

игры не являются поддоменом, его просто значение из db, я не могу сделать it constant –

+0

«Игры» одинаковы в имени поддомена и в запросе var? – splash58

+0

Я хочу, чтобы это было как RewriteCond% {HTTP_HOST}!^(*.). Domain.com $ –