许多RewriteBase在一个.htaccess文件中?

时间:2010-03-12 18:12:56

标签: .htaccess mod-rewrite

我在同一台服务器上有一个域名和一个wordpress-blog。现在我有一个问题(惊喜)。 wordpress位于/ httpdocs / blog /,域指向/ 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 /,所以我的图片和其他网址都出错了。

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

2 个答案:

答案 0 :(得分:9)

不,您只能有一个基本网址。只需重写你的规则:

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]

答案 1 :(得分:0)

当我试图找到类似问题的解决方案时,我来到了这篇文章。似乎可以有多个基本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]

注意到这两个重写都在运行,因此如果重写矛盾,则需要退回到已接受的答案。