htaccess mod_rewrite

Я пытаюсь что-то приложить, когда я перехожу на страницу, например:

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

Я хочу, чтобы mod rewrite изменил его на:

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

Который, конечно, ID – это строка имени символа …

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

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

  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.

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

RewriteRule ^ character /(.*)$ /character.php?slug=$1

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

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

RewriteRule ^ character / ([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/

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

Похоже, вы могли бы использовать mod_rewrite rewritemap .