Как создать страницу пользователя после основного домена (например, instagram.com/user_page/) при регистрации

У меня есть сайт на php, где у каждого пользователя есть свой файл user1.php - это его страница, которая доступна по ссылке https://основной_домен.com/user1 (без хвостов). Это реализована ключами в index.php.

<?php
....
switch($m) {
case "home": default: 
include("modules/home.php"); //домашняя страница
include("tpl/footer.php");
break;

case "user1":  
include("modules/user1.php"); //страница user1
include("tpl/footer.php");
break;   

case "user2":  
include("modules/user2.php"); //страница user2
include("tpl/footer.php");
break;  
}
?>

Также, есть запись в файле .htaccess

<IfModule mod_rewrite.c>

RewriteEngine on
RewriteBase /
RewriteRule ^home?$ index.php?m=home [L]
RewriteRule ^user1?$ index.php?m=user1 [L] 
RewriteRule ^user2?$ index.php?m=user2 [L] 

ErrorDocument 404 /page404
</IfModule>

ВОПРОС: Как сделать так, чтобы при регистрации юзера, автоматом создавались файлы user3.php и сделать соответствующие записи в файлы index.php и .htaccess.? Может это делается вовсе не так, но я исхожу из того что у меня есть, но это делается в ручную... Спасибо.


Ответы (2 шт):

Автор решения: evgeni2306

Если страницы пользователей, в плане интерфейса,у всех одинаковые, то нужно сделать просто 1 файл для всех user.php и для каждого отдельного юзера выводить эту же самую страницу но со своими данными, чтоб получить данные нужно просто при переходе на страницу id юзера передавать, на пример https://основной_домен.com/user?id=1, затем этот id из в данном случае get'а достается и с помощью него из бд собираются данные для вывода

→ Ссылка
Автор решения: newman

Обычно это делается так.

В .htacess оставляется только одно правило.

RewriteRule ^(.*)?$ index.php?m=$1 [L] 

Тут используется регулярное выржаение (regexp) ".*", под которое попадают любые символы. Из-за того что это выражение взято в скобки, то его результат сохраняется в переменной $1 - которую можно использовать в данном правиле. И она используется для передачи данных в параметр m.

По сути это правило заменяет те три правила, которые у вас есть. А так же заменяет то множество правил, которые вы хотели добавить.

Т.е. любой запрос вида site.com/abcd будет преобрасован в /index.php?m=abcd

Дальше уже в вашем коде, вы можете обрабатывать полученный параметр. Если у вас все завязано на файлы, то код может быть примерно таким

if(isset($_GET['m'])) {
  $m = $_GET['m'];
} else {
  $m = 'home'; //если параметр не указан, то по умолчанию это home
}

$filename = 'modules/' . $m . '.php'; //формируем имя файла

//если такое файл есть, то подключаем его. 
if (file_exists($filename)) {
  include($filename);
} else {
//здесь можно либо выводить ошибку, либо подключить home как файл по умолчанию
}
include('tpl/footer.php');

Насчет кода не уверен, что он без ошибок. Но думаю основную идею передает. И это общая идея. А вообще тут есть несколько важных моментов. Например, надо проверять параметр $m чтобы в нем не передали что-то некорректное. Надо, обдумать тот вопрос насколько целесообразно использовать файлы, а не перейти например на базу данных. И т.д. и т.п.

→ Ссылка