mod_rewrite с учетной записью пользователя в URL лучший метод - PullRequest
0 голосов
/ 22 декабря 2011

Я нахожусь в процессе разработки сайта, который обрабатывает учетные записи пользователей следующим образом:

  • www.mysite.com / username
  • www.mysite.com /username / user-action

Я понимаю основы работы с mod_rewrite и могу сделать что-то вроде:

RewriteRule ^(/*)/?$ /index.php?username=$1 [QSA,L]

Однако как это работает с другими каталогами на моем сайте?У меня есть другие URL-адреса, такие как:

  • www.mysite.com / about
  • www.mysite.com / contact

Всегда ли я предполагаю, чтопервый «каталог» в URL - это имя пользователя, а затем попытаться это проверить?Тогда, если он не проверяется, ничего не делать ... кажется много ненужных попаданий в БД.Кроме того, если это так, то как мне справиться с переходом на эти другие страницы, потому что это действительно /index.php?username=about в этот момент ... Я хочу, чтобы это пошло / примерно ..., который затем цикл!

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

Используйте RewriteCond как:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(/*)/?$ /index.php?username=$1 [QSA,L]

Эта RewriteCond сначала проверяет, существует ли файл на самом деле, и если да, то не применяет правило перезаписи. В противном случае перезапишем ваш URL.

Конечно, в зависимости от вашей ситуации есть другие подходы, которые могут быть более подходящими. Но, как правило, вместо того, чтобы проверять, существует ли пользователь в базе данных, сделайте обратное: проверьте, является ли он действительным каталогом / категорией первого уровня, а если не только, то предположите, что это пользователь.

Другим вариантом будет размещение всего статического содержимого в подкаталоге / site / contact / site / about. Это значительно упрощает ведение в том случае, если вы часто будете менять количество разделов контента на сайте. Пример условия перезаписи:

RewriteCond %{REQUEST_URI} !(site/) [NC]

И тогда у вас может быть другое правило перезаписи, которое применяется к site/ на тот случай, если вы хотите сопоставить это с CMS или чем-то еще.

И, наконец, я рекомендую рассмотреть возможность использования веб-фреймворка (Symofony, yii, CodeIgniter), так как, как только вы освоите его, они позволят вам быстрее разрабатывать, а в некоторых случаях встроены гибкие правила переписывания / маршрутизации.

0 голосов
/ 22 декабря 2011

Я бы сделал так, как ТАК. /questions/{questionID}/{questionTitle}, /users/{userID}/{userName} ... и т. Д. используйте первый путь в URI, чтобы дать вам представление о том, что будет дальше.

0 голосов
/ 22 декабря 2011

Сначала обрабатывают физические адреса (например, /resources/logo.png), затем статический контент (/about/ ...), а затем динамические вещи, такие как пользователи.

Я бы порекомендовал использовать /user/[username]/action, хотя для более традиционного шаблона.

...