htaccess mod_rewrite - PullRequest
       11

htaccess mod_rewrite

2 голосов
/ 03 февраля 2010

Я пытаюсь что-то добавить в это всякий раз, когда захожу на страницу вроде:

http://www.example.com/character.php?id=3

Я хочу, чтобы мод переписал, чтобы изменить его на:

http://www.example.com/character/Jim_Carrey

Какой, конечно, ID является строкой имени персонажа ...

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

Ответы [ 4 ]

5 голосов
/ 03 февраля 2010

На самом деле все наоборот:

  1. На своем сайте вы пишете все свои ссылки так, как вы хотите, чтобы они выглядели.Например, http://www.site.com/character/Jim_Carrey

  2. В вашей базе данных вы добавляете поле, обычно называемое "slug" или "post_slug", которое ссылается на часть URL Jim_Carrey ".УНИКАЛЬНЫЙ ЭЛЕМЕНТ, во многом благодаря первичному ключу, поэтому убедитесь, что у вас есть функция, которая позаботится о создании слагов на основе заданной строки (например, заголовка записи) и об отсутствии дубликатов.

  3. Затем в вашем .htaccess (в корневой папке) вы делаете что-то вроде

    RewriteEngine On
    RewriteRule ^character/([a-z0-9_\-]+)/$ character.php?slug=$1 [L,NC]
    
  4. Наконец, в вашем скрипте character.php вы делаетезапрос к базе данных не по идентификатору, а по полю post_slug.

3 голосов
/ 03 февраля 2010

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

RewriteRule ^ символ /(.*)$ /character.php?slug=$1

с URL-адресом, например, http://www.example.com/character/Jim_Carrey. Затем вам нужно будет найти имя персонажа в базе данных, используя переданный слаг, поскольку у вас не будет идентификатора для его поиска.

В качестве альтернативы вы можете включить идентификатор в URL, если вам это нужно, например:

RewriteRule ^ символ / ([0-9] +) /.*$ /character.php?id=$1

Таким образом, вы можете иметь URL-адрес, такой как http://www.example.com/character/3/Jim_Carrey, который будет включать имя персонажа (по причинам SEO и т. Д.), А также идентификатор, который вы затем сможете найти непосредственно в своей базе данных.

Редактировать небольшой пример PHP для вас, первый:

<?php

  // ... database connection stuff here etc

  $slug = $_GET["slug"];

  // IMPORTANT: perform some data sanitization here
  // I'm just going to make sure it's only letters, numbers and
  // hyphens/underscores as an example.
  $slug = preg_replace("/[^a-zA-Z0-9\-_]+/", "", $slug);

  // Now look up in your database
  // Ideally you'd have a slug column to compare this with, that you can fill
  // when your record is created/updated

  // You'd also be best off using bound parameters here, rather than directly
  // adding the data into the query string.  I personally use the MDB2 PEAR
  // module but feel free to use whatever you normally use.
  $qry  = "SELECT * FROM characters WHERE slug='" . $slug . "'";
  $result = mysql_query($qry, $db);

  // do something based on this result, fail if none found
  // or show details if OK etc
  // ...
?>

Надеюсь, это поможет! Как всегда, используйте связанные параметры, где это возможно, для ваших запросов и хорошо выполняйте очистку пользовательских данных. Модуль PEAR MDB2 имеет хорошую страницу о том, как это сделать здесь .

Редактировать 2 быстрая и грязная настройка: -)

Файл

.htaccess выглядит следующим образом:

RewriteEngine On
RewriteRule ^character/(.*)$ /character.php?slug=$1
  • Ваш файл .htaccess в идеале должен находиться в корне вашего сайта. Например, / home / wayne / public_html / или где ваш индексный файл обслуживается с

  • URL-адрес для сопоставления, который будет http://www.example.com/character/Jim_Carrey - с фразой "Jim_Carrey", которая появится в вашем массиве $ _GET как $ _GET ["slug"]. NB извинения, написал, что PHP сонный прошлой ночью выше, так что неудивительно, что $ _POST не будет работать как запрос GET :-) Я обновил его сейчас!

  • Наконец, вам нужно убедиться, что ваш хост поддерживает использование файлов .htaccess. Настройка этого выходит за рамки SO, поэтому любые вопросы по настройке Apache лучше задать на https://serverfault.com/

0 голосов
/ 03 февраля 2010

Звучит так, как будто вы можете использовать mod_rewrite rewritemap .

0 голосов
/ 03 февраля 2010

Я вполне уверен, что вы не можете сделать это через htaccess. Вам нужно будет сделать это на PHP, запросить базу данных, используя информацию из URL (? Id = 3), а затем вызвать функцию заголовка , используя то, что вы узнали из базы данных.

...