为什么我无法将.htaccess文件的内容移动到我的虚拟主机中?

时间:2012-05-31 15:13:54

标签: wordpress apache2

我的Wordpress网站上有一个包含此内容的.htaccess文件。

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

我将此内容移至我网站的Apache虚拟主机(如下)并删除了htaccess文件。

<VirtualHost *:80>
ServerName 68.183.153.223
DocumentRoot /home/david/wordpressWebSite

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

</VirtualHost>

但是,当我尝试重启Apache时,Apache会输出错误。

RewriteBase: only valid in per-directory config files
Action 'restart' failed.

我认为htaccess文件内容可以移动到虚拟主机。什么是错误的?

2 个答案:

答案 0 :(得分:3)

根据docsRewriteBase“设置每个目录的基本URL重写”。

由于您没有设置每个目录的重写,因此该指令在特定目录的.htaccess文件之外没有意义。

答案 1 :(得分:1)

RewriteBase在虚拟主机文件中不起作用。

您可能想问的问题是:

  

如何在VHost RewriteRules中包含相对路径?

特别是在vhosts中,* _FILENAME返回斜杠后跟REQUEST_URI,而不是相对或映射到文件系统!
例如,%{SCRIPT_FILENAME}

  • 在.htaccess:“assets / style.css”
  • 在vhost文件中:“/ assets / style.css”
  • 您需要:“/ var / www / assets / style.css”

有几种解决方案:

  • Solution #1:%{DOCUMENT_ROOT}

    RewriteRule ^/foo/bar$ %{DOCUMENT_ROOT}/foo/baz
    
    RewriteCond %{DOCUMENT_ROOT}/%{SCRIPT_FILENAME} !-f
    RewriteRule (.*) /script.cgi
    
  • Solution #2<Directory> tags

    RewriteEngine On
    <Directory "/var/www/">
        ...
        RewriteCond %{SCRIPT_FILENAME} !-f
        RewriteRule (.*) /script.cgi
    </Directory>
    
      

    在目录标记内,* _FILENAME的处理方式与htaccess文件中的处理方式相同   当服务器有多个别名时,可能会出现问题。

  • Solution #3:%{REQUEST_URI}

      

    尽可能使用%{ _URI}代替%{ _FILENAME}   不是一个真正的答案。只是指出* _URI不必重写,因为它们不应映射到文件系统,因此vhost / htaccess路径是相同的。但是,并不总是可以使用REQUEST_URI,而David Faux在上面评论说它速度较慢。此外,这是