Я создаю веб-сайт, и я хотел бы настроить профиль пользователей, чтобы их URL-адрес профиля делился своим именем. Например, домен веб-сайта будет www.example.com, а URL-адрес пользователя будет www.example.com/username.
Я предполагаю, что это соглашение, потому что я вижу это по всему миру. Это делается, предоставляя каждому пользователю свой собственный каталог и насколько это будет кропотливым?
Я действительно не могу оправдать использование htaccess для чего-то подобного. Я использую htaccess для маршрутизации всего через один php-файл (мой корень index.php
), и пусть php сортирует, как обрабатывать URL-адрес. Например, вы можете сделать это:
$uri = trim($_SERVER['REQUEST_URI'], '/'); $pieces = explode('/', $uri); $username = $pieces[0];
Затем сделайте что-нибудь с $username
.
Способ, которым я разбираю и использую мой url, немного сложнее, чем это, но это не имело бы отношения к вашему вопросу. Просто убедитесь, что все, что вы делаете, может учитывать любые возможные строки запроса и т. Д.
mod-rewrite не очень хорош для производительности, поэтому я бы не стал его злоупотреблять.
Вот лишь небольшое расширение моего исходного кода:
//.htaccess - route all requests through index.php RewriteCond %{REQUEST_URI} !\.(png|jpe?g|gif|css|js|html)$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.php [L]
и это пример того, что вы могли бы сделать в index.php:
$pieces = preg_split('-/-', $_SERVER['REQUEST_URI'], NULL, PREG_SPLIT_NO_EMPTY); $username = $pieces[0]; include "users/{$username}.php";
Теперь вы можете посетить mysite.com/myUserNameHere
, запрос идет на index.php
который разбирает имя пользователя и включает файл для этого пользователя.
Это заботится о маршрутизации так же, как вы просили. Я сказал, что моя маршрутизация сложнее, но мое использование намного сложнее, поэтому это не актуально. Я только предупреждал, что мой код здесь не учитывает URL-адрес с строкой запроса, например «mysite.com/someUser/?foo=bar». Это простой процесс для анализа URL-адреса без строки запроса, и вы должны иметь возможность справиться с этим. Если вам нужна дополнительная помощь, анализируя URL-адрес, тогда сделайте сообщение, спрашивающее об этом.
Вы ищете RewriteRule . Я думаю, что следующее должно сделать:
RewriteRule ^(.*)$ index.php?username=$1 [NC]
Это преобразует отображаемый url ( www.example.com/myusername
) в URL-адрес с параметром GET для вашего index.php. Этот новый URL-адрес, который вы можете использовать внутри, будет выглядеть так:
www.example.com/index.php?username=myusername
Обновление: Ниже приведено дополнительное разъяснение, чтобы ответить на вопросы в вашем комментарии:
RewriteRule выше делает именно то, что вы просите. Пользователь может ввести URL-адрес, например, www.example.com/username
, который будет внутренне переписан (без его www.example.com/index.php?username=myusername
. Таким образом, вы можете получить доступ к переменной get ( $_GET["username"]
), без того, чтобы пользователь видел ее.
Хорошие учебники можно найти здесь и здесь .
Вы имеете в виду не «реальные» URI, а перезаписи. Таким образом, с помощью .htaccess вы можете перенаправить пользователя просмотра с обычного URI, например example.com/user
на example.com/users.php?name=user
user, не увидев его.
Это своего рода соглашение, так как полезно сделать URI более читабельными, а также позволить Google дать лучший рейтинг для этой страницы, поскольку в URI могут быть ключевые слова, а URI короче, поэтому ключевые слова выделяются лучше.
Вот базовый переписать, который должен размещаться в вашем файле .htaccess где-то на вашем сервере (в основном в корневом каталоге, чтобы он мог контролировать все подпапки оттуда):
RewriteRule ^(.*)$ users.php?name=$1 [NC]