我正在使用类似代理的短域与我的网站一起使用.短域是hrci.me,长域是reachchallenges.infectionist.com. hrci.me使用mod_rewrite并且有一个规则,它几乎可以从hrci.me重定向到challengechallenges.infectionist.com,例如:
hrci.me/x/y.php
将重定向到
reachchallenges.infectionist.com/x/y.php
很简单就可以了.在主站点上,我有更多规则可以进一步重写URL,使其美化.一个例子是我网站上的一个脚本challenge.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
这实际上是完美的,我的问题是我希望从hrci.me重定向的URL首先被重写为上面的#2,因此用户将单击hrci.me/ch123并且htaccess文件将读取获取挑战ID 123的标题,将URL重写为/ challenge / 123 / Challenge Title /,然后将其重定向到reachchallenges.infectionist.com.这样的事情可能吗?是否有可能以这种方式使用htaccess从MySQL数据库中读取?
更新:
我把它添加到我的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
它应该重定向到:
但相反,它重定向到:
没有标题.难道我做错了什么?我是否必须在httpd.conf文件中指定RewriteEngine On?
更新2:好的,所以我添加了RewriteEngine On line并保存,当我尝试重启Apache时出现了这个错误:
RewriteMap: file for map hrci not found:/dh/apache2/apache2-ps54462/dbd:SELECT title FROM challenges WHERE id = %s
看起来它完全忽略了dbd部分,并尝试将整个事物作为文件名读取.现在我真的不知道我做错了什么.