.htaccess 文件中的 RewriteCond 给出了错误的标志分隔符

.htaccess 文件中的 RewriteCond 给出了错误的标志分隔符

我正在升级一个网站,并使用这个 .htaccess 文件来显示维护页面:

#MAINTENANCE-PAGE REDIRECT
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.0 # Bogus IP address for posting here
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.0 # Bogus IP address for posting here
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
RewriteRule ^(.*)$ http://www.mysite.no/maintenance.html [R=307,L]

这将为除我添加的两个 IP 地址之外的所有用户打开维护页面。他们获得一个Internal Server Error。我在另一个网站上使用了相同的脚本,效果很好。

查看错误日志,我看到以下内容:

/var/www/vhosts/mysite.no/httpdocs/.htaccess: RewriteCond: bad flag delimiters 

如果我删除我的 .htaccess 文件,我就可以正常使用我的网站了。

我的网站托管在使用 CentOS 5 的 VPN 上。

我该如何解决这个问题?

答案1

我相信你必须使用[OR]标志来链接规则,如下所示:

#MAINTENANCE-PAGE REDIRECT
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.0 [OR]
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.0 [OR]
RewriteCond %{REQUEST_URI} !^/maintenance\.html$ 
RewriteRule ^(.*)$ http://www.mysite.no/maintenance.html [R=307,L]

在 apache 文档中,它位于本节的底部作为示例:http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond

此外,您可以使用RewriteLogRewriteLogLevel 3指令来获得更多见解。

答案2

需要尝试/检查的一些事项:

  • 确保mod_rewrite已在 apache 中加载并启用。
  • 确保文件FileInfo允许覆盖(使用AllowOverride.htaccess
  • 从你的行中删除注释RewriteCond

相关内容