#.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 Обе страницы загружены в корневую папку