Я пытаюсь что-то приложить, когда я перехожу на страницу, например:
http://www.example.com/character.php?id=3
Я хочу, чтобы mod rewrite изменил его на:
http://www.example.com/character/Jim_Carrey
Который, конечно, ID – это строка имени символа …
Для такого примера … Я пытался работать с ним, но, похоже, не получаю большую часть производства htaccess, потому что я не очень хорошо работал с .htaccess
.
На самом деле это наоборот:
На вашем сайте вы пишете все свои ссылки так, как вы хотите, чтобы они выглядели. Например, http://www.site.com/character/Jim_Carrey
В вашей базе данных вы добавляете поле, обычно называемое «slug» или «post_slug», которое ссылается на часть URL-адреса Jim_Carrey. ЭТО ДОЛЖНО БЫТЬ УНИКАЛЬНЫМ ЭЛЕМЕНТОМ, что очень важно для первичного ключа. функция, которая заботится о создании пули на основе данной строки (например, заголовок сообщения) и убедитесь, что нет дубликата.
Затем в вашем .htaccess (в корневой папке) вы делаете что-то вроде
RewriteEngine On RewriteRule ^character/([a-z0-9_\-]+)/$ character.php?slug=$1 [L,NC]
Наконец, в вашем скрипте 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 .