【问题标题】:Many RewriteBase in one .htaccess file?一个 .htaccess 文件中有多个 RewriteBase?
【发布时间】:2011-01-26 22:46:30
【问题描述】:

我在同一台服务器上有一个域和一个 wordpress 博客。现在我有一个问题(惊喜)。 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/,所以我的图片和其他 url 出错了。

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

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    不,您只能有一个基本 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]
    

    【讨论】:

    • 似乎最后一个 RewriteBase 指令胜过整个 .htaccess 文件。
    • 事实上,在问题中使用RewriteBase 背后的最初想法似乎无论如何都是错误的。不管RewriteBase 的值如何,您都需要将RewriteRule 模式写为^blog/.RewriteBase 不会影响与 pattern 匹配的 URI,它只会影响相对的 substitutions
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-14
      • 2013-08-27
      • 1970-01-01
      • 2019-03-23
      • 2013-03-07
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      相关资源
      最近更新 更多