编辑.htaccess后,背景图像消失

时间:2016-04-08 22:21:44

标签: html css .htaccess mod-rewrite

这是我第一次编辑.htaccess,情况是我需要限制除了几个IP地址之外的任何人访问网站并将其他人重定向到特定页面。为此,我在.htaccess中使用以下代码:

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !XXX.XXX.XXX.XXX
RewriteRule (.*) index.html [QSA,L]

当我更改此文件中的IP时,问题就开始了 - 用于index.html并在其内部css中声明的背景图像停止显示。我已经在Chrome和Firefox中对此进行了测试,在Firefox中,当IP更改为我所拥有的IP时,背景图像会重新出现,而在Chrome中,即使在IP更改后它也不会重新出现。我希望有人能够帮助我。

最好的问候。

1 个答案:

答案 0 :(得分:0)

虽然重写是一种强大的技术,但它有许多警告并且相对复杂才能做到正确。在这里,解决方案根本不使用mod_rewrite。 Apache的mod_authz_host模块允许您使用Require指令指定允许哪些IP地址访问资源。

如果您需要在Require不满足的情况下显示特定页面,只需为将被触发的错误403(禁止)指定ErrorDocument

如果错误页面需要访问其他资源,则需要绕过IP限制并允许使用Require指令:

以下是.htaccess文件的外观:

Require ip XXX.XXX.XXX.XXX
ErrorDocument 403 /index.html
<Files "specific_image.png">
     Require all granted
</Files>

请注意,这会导致Apache中的内部重定向。

如果您需要外部重定向并让用户在其浏览器的地址栏中包含实际的index.html文件,则配置会变得有点复杂,因为必须明确允许该文件:

Require ip XXX.XXX.XXX.XXX
ErrorDocument 403 %{REQUEST_SCHEME}://%{HTTP_HOST}/index.html
<Files "index.html">
    Require all granted
</Files>
<Files "specific_image.png">
     Require all granted
</Files>

请注意使用变量来避免对index.html文件的绝对URL进行硬编码。此处使用完整的URL是必要的,以触发外部重定向。