Парсинг URL с использованием PHP - PullRequest
0 голосов
/ 05 октября 2009

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

По сути, у меня есть веб-сайт, который почти на 100% динамичен. Все ссылки на веб-сайты генерируются с использованием PHP, а все страницы состоят из php include / code. Я пытаюсь улучшить SEO сайта за счет улучшения URL (как указано в другом вопросе), и я немного борюсь.

Я использую mod_rewrite для переписывания симпатичных URL-адресов в некрасивые URL-адреса на сервере. Поэтому мне нужно теперь преобразовать уродливые URL-адреса (которые генерируются из кода php на страницах) в более хорошие URL-адреса.

Вот URL-адреса, которые мне нужно проанализировать (они есть и в другом вопросе):

/index.php?m=ModuleType
/index.php?m=ModuleType&categoryID=id
/index.php?m=ModuleType&categoryID=id&productID=id
/index.php?page=PageType
/index.php?page=PageType&detail=yes

Вот что я хочу, чтобы вышеуказанные URL были проанализированы:

/ModuleType
/ModuleType/CategoryName
/ModuleType/CategoryName/ProductName
/PageType
/PageType/Detail

В другом вопросе, опубликованном Гамбо , есть пример, однако я чувствовал, что это было немного грязно и неясно, что именно он делал.

Может ли кто-нибудь помочь мне решить эту проблему?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 05 октября 2009

Я думаю, что вижу, что вы после ... Вы сделали все переписывание URL, но все ссылки между вашими страницами используют старый синтаксис URL.

Единственный способ, который я могу увидеть в этом, - это выполнить какой-либо поиск по регулярному выражению и заменить ссылки, чтобы они использовали новый синтаксис. Это будет немного сложнее, если все ссылки будут генерироваться динамически, но, надеюсь, этого не будет слишком много.

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

<?php echo "<a href='/index.php?m=$ModuleType&categoryID=$id'>"; ?>

Таким образом, вы бы изменили это на:

<?php echo "<a href='$ModuleType/$id'>"; ?>

Извините, если я допустил ошибки в синтаксисе, просто у меня в голове ...

1 голос
/ 05 октября 2009

Вам понадобится фронт-контроллер, который отправит URL на нужную страницу.

  1. Apache перезапишет URL-адрес, используя правила в .htaccess, так что все написанное будет перенаправлено в index.php? Q =. Например, ввод http://example.com/i/am/here приведет к вызову index.php? Q = / i / am / here
  2. Index.php проанализирует путь из $ _GET ["q"] и решит, что делать. Например, он может содержать страницу или перейти в базу данных, найти путь вверх, получить соответствующий контент и распечатать его

Если вам нужен рабочий пример .htaccess, который сделает именно это (перенаправьте на index.php с? Q = path), посмотрите, как это делает drupal:

http://cvs.drupal.org/viewvc.py/drupal/drupal/.htaccess?revision=1.104

1 голос
/ 05 октября 2009

Как писал Палантир, это делается с помощью mod_rewrite и .htaccess. Чтобы получить правильные условия перезаписи в ваш .htaccess, вы можете взглянуть на Mod Rewrite Generator (например, http://www.generateit.net/mod-rewrite/).. Делает это намного проще.

1 голос
/ 05 октября 2009

Если я не понял ваш вопрос, вы не разбираете "уродливые" URL, ваш PHP-скрипт вызывается с ними, поэтому вы $_GET[] свои параметры (m, categoryID, productID) и комбинируете их, чтобы сделать ваш URL-адреса, которые не должны быть слишком сложными (просто немного логики, чтобы увидеть, есть ли один параметр, и объединить строки).

...