подстраницы в поддомене

#.htaccess #rewrite #subdomain

#.htaccess #переписывание URL #поддомен

Вопрос:

Хорошо, цель состоит в том, чтобы иметь неограниченное количество поддоменов, динамически создаваемых для наших пользователей. Итак, запрос на www.example.com/sub_index.php?user=demo переведет в demo.example.com url, в то время как www.example.com обслуживается index.php .

Я разрешил серверу имен и веб-серверу принимать запросы с подстановочными знаками (на самом деле я связываюсь со своим хостинговым сервером, чтобы сделать это).

В части htaccess у меня есть следующее:

 ####rewrite example.com into www.example.com
RewriteCond %{HTTP_HOST} ^example.com 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 
RewriteCond %{THE_REQUEST} ^[A-Z]  /([^/] /)*index.htm([#?][^ ]*)? HTTP/ 
RewriteRule ^(([^/] /)*)index.htm$ http://www.example.com/$1 [R=301,L] 

####subdomains 
RewriteCond %{HTTP_HOST} !^www.example.com 
RewriteCond %{HTTP_HOST} ([a-zA-Z0-9] ).example.com 
RewriteRule ^(.*)$ sub_index.php?user=%1 
  

Итак, запрос на demo.example.com / и для demo.example.com/index.php обслуживается www.example.com/sub_index.php?user=demo

Моя проблема в том, что я не могу найти способ заставить подстраницы работать в поддомене, например: demo.example.com/somepage.php должны обслуживаться www.example.com/sub_page.php?user=demo пока demo.example.com/otherpage.php?id=5 должны обслуживаться www.example.com/sub_page2.php?user=demoamp;id=5 .

Спасибо за любой совет

Ответ №1:

Чтобы сохранить управляемость вашими правилами перезаписи, вам лучше всего преобразовать URL-адреса без введения новых переменных.

В вашем примере невозможно использовать простую текстовую замену, чтобы получить из somepage.php для sub_page.php и затем otherpage.php для sub_page2.php — вам понадобится новое правило для каждой страницы, потому что только вы знаете о сопоставлении. Намного проще, если вы основываете результирующий URL на данных в исходном URL.

Например, вы могли бы разработать схему, при которой:

 demo.example.com/somepage.php?start=5
  

преобразуется в

 www.example.com/sub_somepage.php?user=demoamp;start=5
  

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

 RewriteRule ^/([A-Za-z0-9_] .php) /sub_$1?user=%1 [qsappend]
  

Заставить правила перезаписи работать правильно может быть довольно сложно. При доработке своих правил вы, вероятно, захотите добавить это в свою конфигурацию:

 RewriteLog "/tmp/httpd-rewrite.log"
RewriteLogLevel 5
  

Затем вы можете проверить, что ваши правила выполняют то, что вы хотите. Более подробная информация о том, как работают эти директивы, находится по адресу httpd.apache.org. В частности, если вы хотите перенаправить на другой хост для обслуживания контента, вам придется добавить новое имя хоста к замене и флаг [перенаправление].

Комментарии:

1. RewriteRule ^/([A-Za-z0-9_] .php) /sub_$1?user=%1 [qsappend] Это работает на sub_index.php Но выдает мне ошибку 404 в sub_other_page.php Обе страницы загружены в корневую папку