Използвам подобен на прокси кратък домейн във връзка с моя сайт. Краткият домейн е 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 адреса, като го разкрасяват. Един пример е скрипт на моя сайт, challenges.php, който приема един параметър, chid, който е ID на предизвикателството, свързан с повече информация в базата данни. Предаден като параметризиран скрипт, той ще изглежда така: /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 да прочете базата данни, вземете заглавието за предизвикателство id 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
След това добавих 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, получих тази грешка:
RewriteMap: file for map hrci not found:/dh/apache2/apache2-ps54462/dbd:SELECT title FROM challenges WHERE id = %s
Изглежда, че напълно игнорира частта dbd
и се опитва да прочете всичко като име на файл. Сега наистина не знам какво правя погрешно.