HaL*_*eEk 5 mysql apache .htaccess mod-rewrite
我正在使用类似代理的短域与我的网站一起使用.短域是hrci.me,长域是reachchallenges.infectionist.com.hrci.me使用mod_rewrite并且有一个规则,它几乎可以从hrci.me重定向到challengechallenges.infectionist.com,例如:
hrci.me/x/y.php
Run Code Online (Sandbox Code Playgroud)
将重定向到
reachchallenges.infectionist.com/x/y.php
Run Code Online (Sandbox Code Playgroud)
很简单就可以了.在主站点上,我有更多规则可以进一步重写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
Run Code Online (Sandbox Code Playgroud)
这实际上是完美的,我的问题是我希望从hrci.me重定向的URL首先被重写为上面的#2,因此用户将单击hrci.me/ch123并且htaccess文件将读取数据库,获取挑战ID 123的标题,重写网址/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
Run Code Online (Sandbox Code Playgroud)
然后在我的一个子域中添加了一个RewriteRule,我并没有真正使用它(测试它):
RewriteEngine On
RewriteRule ^ch([0-9]{1,4})(/)?$ http://reachchallenges.infectionist.com/challenge/$1/${hrci:$1} [R=301,L]
Run Code Online (Sandbox Code Playgroud)
当我在子域上访问此路径时:
/ 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
Run Code Online (Sandbox Code Playgroud)
看起来它完全忽略了dbd部件并试图将整个事物作为文件名读取.现在我真的不知道我做错了什么.
使用RewriteMap一切皆有可能:
RewriteMap examplemap prg:/path/to/file.php
RewriteRule (.*) ${examplemap:$1}
Run Code Online (Sandbox Code Playgroud)
你也可以使用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}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4510 次 |
| 最近记录: |