在一个.htaccess文件中重写多个数据库?

在一个.htaccess文件中重写多个数据库?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我在同一台服务器上有一个域名和一个wordpress博客。现在我有一个问题(惊喜)。wordpress位于/httpdocs/blog/上,domain指向/httpdocs/,我试图将其重定向到/httpdocs/domain/。但是,很明显,我在Wordpress中有永久链接 这是我当前的.htaccess: RewriteEngine On RewriteBase /blog/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUE

我在同一台服务器上有一个域名和一个wordpress博客。现在我有一个问题(惊喜)。wordpress位于/httpdocs/blog/上,domain指向/httpdocs/,我试图将其重定向到/httpdocs/domain/。但是,很明显,我在Wordpress中有永久链接

这是我当前的.htaccess:

RewriteEngine On

RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]

RewriteBase /
RewriteCond %{HTTP_HOST} domain.com
RewriteCond %{REQUEST_URI} !^/domain
RewriteCond %{REQUEST_URI} !^/cgi-bin
RewriteRule ^(.*)$ domain/$1 [L]
但正如你可能已经假设的那样,这是行不通的。Wordpress的永久链接也会影响到/domain/所以我的图片和其他URL会出错


有什么建议吗?可以这样使用RewriteBase吗?

不,您只能有一个基本URL。只要重写你的规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^blog/. /blog/index.php [L]

RewriteCond %{HTTP_HOST} =example.com
RewriteCond %{REQUEST_URI} !^/domain
RewriteCond %{REQUEST_URI} !^/cgi-bin
RewriteRule ^(.*)$ domain/$1 [L]

当我试图为类似的问题找到解决方案时,我来到了这篇文章。似乎可以有多个基本URL,但重写后逻辑不会停止。如果URL同时命中两个重写基,则将运行所有重写。因此,最严格的重写基础应该放在文件的末尾。对于本例,应为:

RewriteEngine On

RewriteBase /
RewriteCond %{HTTP_HOST} domain.com
RewriteCond %{REQUEST_URI} !^/domain
RewriteCond %{REQUEST_URI} !^/cgi-bin
RewriteRule ^(.*)$ domain/$1 [L]

RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]

请注意,由于两个重写都在运行,因此如果重写不一致,则需要返回到已接受的答案。

似乎最后一个
RewriteBase
指令赢得了整个.htaccess文件。事实上,问题中使用
RewriteBase
的最初想法似乎是错误的。不管
RewriteBase
的值是多少,您都需要将
RewriteRule
模式写成
^blog/
RewriteBase
不影响与模式匹配的URI,它只影响相对替换。