2

我有一个常规站点,我已将 Wordpress 添加到该站点,该站点安装在 /wp 中并重写为 root。我还有一个需要重写规则的 perl 程序。我知道我不应该有两个 RewriteBase 实例,但看不到如何让这两个部分一起工作。在当前设置下,当 WP 部分处于活动状态时,虚拟目录 /amazon 会导致所有调用都出现 404。

删除第二个 rewritebase 无效。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/index.php [L]
</IfModule>
# END WordPress

RewriteEngine on
RewriteBase /
RewriteRule ^(amazon)$ $1/ [R]
RewriteRule ^(amazon)/(.*)(\.[a-z]+)$ cgi-bin/cbooks/ca.pl?virtual=$2&virtual.dir=$1 [L]
RewriteRule ^(amazon)/(.*)$ cgi-bin/cbooks/ca.pl?virtual=$2&virtual.dir=$1 [L]
4

1 回答 1

1

您应该将您的亚马逊规则放在您的 wordpress 路由规则之前,并在规则的目标中添加一个前导斜杠,使其成为绝对 URL 路径:

RewriteEngine on
RewriteRule ^amazon$ /$1/ [R,L]
RewriteRule ^amazon/(.*)(\.[a-z]+)$ /cgi-bin/cbooks/ca.pl?virtual=$2&virtual.dir=$1 [L]
RewriteRule ^amazon/(.*)$ /cgi-bin/cbooks/ca.pl?virtual=$2&virtual.dir=$1 [L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/index.php [L]
</IfModule>
# END WordPress

wordpress 路由规则正在路由您的亚马逊规则,因为它们排在第一位。

于 2013-09-10T15:53:11.157 回答