Как я могу сделать мои URL дружественными из этого примера? - PullRequest
0 голосов
/ 02 ноября 2011

Мой сайт в настоящее время отображается так (при нажатии на объявление):

hxxp://mysite.com/viewItem.php?id=10

Я ЛЮБЛЮ, чтобы URL читался:

hxxp://mysite.com/dogs/121/border-collie-for-sale-to-good-home  

где «dogs» всегда является константой, 121 всегда является $ row ['postId']; и "border-collie-for-sale-to-good-home" всегда является моим $ row ['title'];

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

1 Ответ

0 голосов
/ 02 ноября 2011

Что вы можете сделать, это добавить перенаправление вверху скрипта viewItem.php.Этот редирект должен будет проверить параметр запроса, который вы используете, чтобы указать, что файл .htaccess переписан.Примерно так:

if( !isset($HTTP_GET_VARS['rewritten']) ) {
    // use whatever behind the scenes stuff you need to construct the friendly URL
    $friendly_url = "http://mysite/" . getCategory() . "/" . getID() . "/" . getTitle();

    // Now redirect the browser:
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: $friendly_url");
    exit();
}

// business as usual, the rest of your viewItem.php script.

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

Теперь в файле .htaccess вы хотите переписать уродливый URL-адрес в дружественный URL-адрес, но вам нужно включить rewritten в перезаписи (я предполагаю, что «121» в вашем примере - это «id», который принимает скрипт viewItem.php:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^/]+/([^/]+)/ /viewItem.php?id=$1&rewritten=true [L]

Если вы пропустите там &rewritten=true, он пойдетв цикл перенаправления. Вы также можете добавить QSA в скобках правила, если вы хотите передать другие строки запроса вместе с перезаписью, если вы хотите обрабатывать дружественные URL-адреса, такие как: http://mysite/dogs/121/border-collie-for-sale/?sort=ascС [L,QSA], «sort = asc» передается viewItem / php.

Так вот, что происходит сейчас, когда кто-то нажимает на объявление и получает http://mysite/viewItem.php?id=121:

  1. В строке адреса браузера указано, что http://mysite/viewItem.php?id=121 отправляется запрос на mysite, и к viewItem.php обращаются
  2. В верхней части viewItem.php обнаруживается отсутствие параметра rewritten, поэтому он перенаправляет браузерhttp://mysite/dogs/121/border-collie-for-sale
  3. Так как это был редирект 301строка адреса браузера изменяется на http://mysite/dogs/121/border-collie-for-sale
  4. Запрос повторно отправляется в mysite, но на этот раз .htaccess перезаписывает /dogs/121/border-collie-for-sale в /viewItem.php?id=121&rewritten=true ВНУТРЕННЯ, поэтому строка адреса браузера не изменяется.
  5. Запрос возвращается в viewItem.php, на этот раз скрипт видит, что есть параметр rewritten, и выполняет свою обычную работу, и запрос обрабатывается

. Вы можете использоватьлюбое имя для флага параметра, которое вы хотите, если ни один из сценариев не использует его.

...