![配置 apache 使用 mod_rewrite 和 mod_dbd 使用 postgreSQL 和 PHP](https://linux22.com/image/734574/%E9%85%8D%E7%BD%AE%20apache%20%E4%BD%BF%E7%94%A8%20mod_rewrite%20%E5%92%8C%20mod_dbd%20%E4%BD%BF%E7%94%A8%20postgreSQL%20%E5%92%8C%20PHP.png)
我正在尝试设置 Apache,以便将 mod_rewrite 和 mod_dbd 与 postgreSQL 结合使用,用于俱乐部网站。(Kubuntu 18.04、Apache 2.4、PHP 7.2)我可以找到有关 mod_dbd 与 mySQL 的一些详细信息,但我对这种组合感到非常困难。任何提示、建议或答案都值得赞赏。
我当前的 VirtualHost 配置文件:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
ServerAdmin [email protected]
DocumentRoot /var/www/html/example.com
ErrorLog ${APACHE_LOG_DIR}/example.com/error.log
CustomLog ${APACHE_LOG_DIR}/example.com/access.log combined
RewriteEngine On
RewriteMap myquery "dbd:SELECT page_name FROM page WHERE page_identifier = (%s)"
RewriteMap revquery "dbd:SELECT page_identifier FROM page WHERE page_name = (%s)"
RewriteRule ^/([A-Za-z0-9_-]+)$ /index.php?id=${revquery:$1} [L]
RewriteCond %{QUERY_STRING} id=(\d+)
RewriteRule ^/index\.php? /${myquery:%1}? [R=307,L]
</VirtualHost>
我已将以下内容移至主配置文件并添加了一些默认语句。(并删除了 <IfModule> 标签)
DBDriver pgsql
DBDParams "hostaddr=127.0.0.1 port=5436 dbname=page user=user password=pass"
DBDMin 1
DBDKeep 2
DBDMax 10
DBDExptime 60
笔记
- 实际域名已删除。它不适合公众查阅
- 我所得到的答案部分基于以下两个问题 https://stackoverflow.com/questions/13623195/assistance-with-a-rewriterule-using-rewritemap https://stackoverflow.com/questions/2252238/how-can-i-match-query-string-variables-with-mod-rewrite 也 http://httpd.apache.org/docs/current/mod/mod_dbd.html
- 我正在使用 PostgreSQL 的非标准端口,如果我使用未修改的 URL,页面就可以正常工作。它们是从我希望 mod_dbd 访问的同一数据库创建的。
- 预期的 URL 为 index.php?id=X,其中 X 是一个正整数
编辑 4:- 删除了很多有关失误的细节 - 我最初遗漏了RewriteEngine On
- 我的 RewriteMap 语句也错了。参数显然需要是 %s,尽管我不确定这到底意味着什么 - 我发现 <IfModule> 标签不是必需的,所以我删除了它们。如果这些模块缺失,我可能想要一个错误!
编辑 5:现在可以工作了!! 以上详细信息已更改。
元问题:我是否应该将问题恢复为早期形式并将其中一些信息移至答案,还是保持原样?