.htaccess & mod_rewrite для плоских URL-адресов, используя разные критерии - PullRequest
1 голос
/ 08 сентября 2011

Как я могу использовать .htaccess & mod_rewrite для выполнения следующей перезаписи URL?

Эта страница: http://mysite.com/page.php?id=2387281

Становится: http://mysite.com/[criteria1]/[criteria2]

У меня настроена база данных, поэтому первичным ключом является идентификационный номер, но я хочу, чтобы в моих URL-адресах содержалось два поля, связанных с этим идентификатором, но не сам фактический идентификатор.

Как мне это сделать?

Пример использования структуры моей базы данных

Row 1: ID: 234 ; CRITERIA1: Food ; CRITERIA2: Steak

mysite.com/page.php?id=234 --> mysite.com/food/steak

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

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

Вы должны сделать что-то вроде:

RewriteRule ([^/]*)/(.*) page.php?criteria1=$1&criteria2=$2

... и запустите SELECT для базы данных в верхней части скрипта, чтобы получить идентификатор на основе критериев ...

$result = mysql_query("SELECT id FROM table WHERE criteria1 = '".mysql_real_escape_string($_GET['criteria1'])."' AND criteria2 = '".mysql_real_escape_string($_GET['criteria2'])."'");
1 голос
/ 08 сентября 2011

Если я понимаю ваше право, которое я думаю понимаю, тогда вы вообще не будете использовать идентификатор в URL.Пусть правило modrewrite будет выглядеть примерно так:

RewriteRule ^([a-z0-9-]+)/([a-z0-9-]+)$ http://site.com/page.php?col1=$1&col2=$2 [L]

Тогда в page.php я полагаю, что у вас был такой запрос:

select * from table where id=123

Просто замените этот запрос на:

"select * from table where col1='".$_GET['col1']."' and col2='".$_GET['col2']."'"

Очевидно, убедитесь, что санируйте ваш ввод, чтобы предотвратить инъекцию sql.

Единственное, что вам нужно убедиться, это то, что кортеж col1 и col2 уникален и не возвращает больше 1значение.

Таким образом, в этом примере номер идентификатора никогда не отображается в URL и фактически нигде не используется.

0 голосов
/ 08 сентября 2011

Не думаю, что вы можете сделать это с помощью mod_rewrite / .htaccess.Вместо этого вы должны использовать php для подключения к mysql и загрузки данных, а затем перенаправить на соответствующую страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...