2009-07-18 2 views
0

Я вижу сайты, использующие это соглашение.Как использовать htaccess для динамически сгенерированных URL-адресов

hxxp: //www.twitter.com/golem

hxxp: //www.twitter.com/golem/following

Я пытаюсь сделать это на моем сайте. «golem» является динамичным и в основном является именем пользователя.

Таким образом, hxxp: //www.mysite.com/golem перейдет на страницу golem.

И hxxp: //www.mysite.com/golem/details.php перейдет на страницу сведений о големе.

Возникает вопрос:

  1. Как сделать HTAccess поэтому он всегда добавляет & user_name = голема для всех моих PHP файлов в строке запроса? Не показывая его в адресной строке браузера. Таким образом, в основном это необходимо для первого пути URL-адреса с косой чертой и добавления его в качестве запроса для завершения любой страницы PHP, на которую я смотрю.

  2. Как сделать так, чтобы hxxp: //www.mysite.com/golem/details.php фактически запускал файл в реальном местоположении в hxxp: //www.mysite.com/details.php? User_name = golem (нет «golem» в пути) WHILE все еще отображает поддельный URL-адрес в адресной строке.

  3. Сделать работу для других URL-адресов, как hxxp: //www.mysite.com/golem/page.php и hxxp: //www.mysite.com/golem/view.php и т.д. и т.п.

Посмотрел учебники и т. Д., Но не нашел ответа. Цените любую помощь!

+0

Посмотрите на mod_rewrite. – derobert

ответ

1

Включить mod_rewrite, если это еще не сделано. В вашем .htaccess вы должны добавить RewriteRule.

Попробуйте это:

RewriteRule ^([^/]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L] 

Если это не сработает, попробуйте с этим:

RewriteRule ^/([^/]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L] 

Но есть аналог: если у вас есть классические URL-адреса, они будут пойманы эти правила. Если вы можете отличать имена пользователей от имен скриптов, есть решение. Предположим, что имена пользователей не могут содержать точку. Затем, вы должны заменить правило с этим:

RewriteRule ^([^/.]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L] 

(Обратите внимание на точку в первых круглых скобках - это говорит о том, что если URL содержит точку, то оно не будет соответствовать правилу).

Теперь каждый URL-адрес, содержащий точку перед параметрами, будет рассматриваться как «нормальный» URL-адрес.

Если имена пользователей CAN содержат точку, мы сталкиваемся с проблемой, потому что, как вы можете сказать, что details.php является именем php-скрипта или имени пользователя? В этих случаях становится очень сложно писать RewriteRules, которые соответствуют только тому, что мы хотим. И их также очень сложно проверить, потому что есть много крайних случаев, о которых очень сложно думать.

+0

Большое спасибо FWH.Кажется, что это работает, но по какой-то причине WEIRD я больше не могу читать другие части параметров URL. Я могу получить имя пользователя, используя $ _REQUEST ['user_name'], но если URL-адрес похож на hxxp: //www.mydomain.com/details.php? Item_id = 23, то я не могу получить item_id с URL-адресом по какой-то странной причине. Кто-нибудь знает почему? – 2009-07-18 07:48:35

+0

Это связано с тем, что приведенные выше правила захватывают каждый URL-адрес и обрабатывают первую часть как имя пользователя, даже если это «details.php». Если вы можете отличать имена пользователей от имен скриптов (скажем, например, если имена пользователей не могут содержать точку), тогда вы должны заменить правила чем-то, что будет улавливать только URL-адреса без имен скриптов. Я обновляю свой ответ, чтобы отразить это. – FWH

+0

Спасибо FWH. Но он все еще не работает. Я сделал запрос для item_id в URL, но он не даст его мне. Однако это дает мне имя пользователя. – 2009-07-18 08:03:26