Пользовательские URL-адреса – предоставление каждому пользователю URL-адреса

Я создаю веб-сайт, и я хотел бы настроить профиль пользователей, чтобы их 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]