MySQL + htaccess mod_rewrite? - PullRequest
       32

MySQL + htaccess mod_rewrite?

5 голосов
/ 06 сентября 2011

Я использую короткий прокси-домен в сочетании с моим сайтом.Коротким доменом является hrci.me, а длинным доменом - reachchallenges.infectionist.com.hrci.me использует mod_rewrite и имеет правило, которое в значительной степени выполняет простое перенаправление с hrci.me на reachchallenges.infectionist.com, например:

hrci.me/x/y.php

будет перенаправлять на

reachchallenges.infectionist.com/x/y.php

Просто, как может быть.На главном сайте у меня есть больше правил, которые еще раз переписывают URL, предварительно его выполняя.Одним из примеров является скрипт на моем сайте challenge.php, который принимает один параметр chid , который представляет собой идентификатор вызова, связанный с дополнительной информацией в базе данных.Переданный как параметризованный скрипт, он будет выглядеть так: /challenge.php?chid=123, но после перезаписи он будет выглядеть так: /challenge/123/Challenge+Title/, где Challenge+Title - это фактический заголовок элемента из базы данных.Существует также другой способ вызова одной и той же страницы, например: /ch123, поэтому, по сути, вы можете получить доступ к странице 3 различными способами:

1. /challenge.php?chid=123
2. /challenge/123/Challenge+Title/
3. /ch123

Это на самом деле работает отлично, проблема, с которой я столкнулсяя хочу, чтобы URL-адреса, перенаправленные из hrci.me, сначала были переписаны так, чтобы они выглядели как №2 выше, поэтому пользователь должен щелкнуть hrci.me/ch123, а файл htaccess прочитает базу данных, получит заголовок для идентификатора вызова 123переписать URL-адрес на /challenge/123/Challenge+Title/, а затем перенаправить его на reachchallenges.infectionist.com.Возможно ли что-то подобное?Можно ли читать из базы данных MySQL, используя htaccess, таким образом?

ОБНОВЛЕНИЕ : я добавил это в свой файл httpd.conf:

DBDriver mysql
DBDParams "host=*****,user=*****,pass=*****,dbname=*****"
RewriteMap hrci "dbd:SELECT title FROM challenges WHERE id = %s"
RewriteLog "/home/halo2freeek/rewrite.log"
RewriteLogLevel 3

Затем добавилa RewriteRule для одного из моих поддоменов, который я на самом деле не использую (для проверки):

RewriteEngine On
RewriteRule ^ch([0-9]{1,4})(/)?$ http://reachchallenges.infectionist.com/challenge/$1/${hrci:$1} [R=301,L]

Когда я посещаю этот путь на поддомене:

/ ch232

Он должен перенаправить на:

http://reachchallenges.infectionist.com/challenge/232/Challenge+Title

Но вместо этого он перенаправляет на:

http://reachchallenges.infectionist.com/challenge/232/

Без заголовка.Я делаю что-то неправильно?Нужно ли указывать RewriteEngine On в файле httpd.conf?

ОБНОВЛЕНИЕ 2 : Хорошо, поэтому я добавил строку RewriteEngine On и сохранил при попытке перезапустить Apache Iполучил эту ошибку:

RewriteMap: file for map hrci not found:/dh/apache2/apache2-ps54462/dbd:SELECT title FROM challenges WHERE id = %s

Похоже, что он полностью игнорирует часть dbd и пытается прочитать все это как имя файла.Теперь я действительно не знаю, что я делаю неправильно.

1 Ответ

5 голосов
/ 06 сентября 2011

С RewriteMap все возможно:

RewriteMap examplemap prg:/path/to/file.php
RewriteRule (.*) ${examplemap:$1}

Вы также можете использовать mod_dbd :

DBDriver mysql
DBDParams "host=localhost,user=db_user,pass=password,dbname=db"
RewriteMap myquery "dbd:select new_url from rewrite where old_url = %s" 
RewriteRule (.*) ${myquery:$1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...