使用.htacess
文件对我来说一直是一个非常令人沮丧的经历。有人请帮忙。
这就是我想要实现的目标:
(example.com)
重定向到maintenance.html
页。123.456.789.0
以下是我的文件:
index.html
的位置为/var/www/html
maintenance.html
的位置为/var/www/html
.htaccess
文件的位置为/var/www/html
我的.htaccess
文件的内容:
#Rewrite to www
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com[nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
#301 Redirect Old File
Redirect 301 /index.html /maintenance.html
#Block users by IP
order allow,deny
deny from all
allow from 123.456.789.0
请帮助我理解:
500 internal server error
? /etc/apache2/apache.conf
/etc/apache2/sites-enabled/000-default.conf
或/etc/apache2/sites-available/000-default.conf
a2enmod rewrite
?<IfModule mod_rewrite.c>
文件中添加</IfModule>
和config
作为页眉和页脚吗?很抱歉有太多问题,但我真的很想知道这一切。 提前谢谢。
答案 0 :(得分:1)
上述每个文件的位置是否正确?在什么情况下, 页面最终在
500 internal server error
?
A&#34; 500内部服务器错误&#34;消息表示存在错误,您需要检查服务器日志以获取确切的详细信息。 Apache不会显示每个人都能看到的错误消息。
我应该做出哪些改变
这取决于问题所在。如果问题是&#34; 500内部服务器错误&#34;这意味着我们仍然不知道问题所在。
是否需要运行a2enmod重写?
该命令启用mod_rewrite
。如果未启用,则需要启用它。如果已经启用,则不需要启用它。
值得注意的是,此命令不是官方Apache发行版的一部分。一些Linux发行版(即Debian和衍生产品)会更改第三方软件包以匹配其配置首选项,如本例所示。
我应该添加
<IfModule mod_rewrite.c>
和</IfModule>
作为标头 和任何上述配置文件中的页脚?
正如documentation所解释的,当未安装给定模块时,此块可用于忽略指令。这对于要分发的配置模板和可选功能非常有用。在您的情况下,如果mod_rewrite不可用,它会默默地忽略您的代码 - 您不希望这样。
最后但并非最不重要:
order allow,deny
deny from all
allow from 123.456.789.0
...属于旧的(并且很难理解)Apache / 2.2语法。如果您使用的是Apache / 2.4 *,则可能需要尝试Require。
(*)有些发行版讨厌捆绑最近的软件,但2.4已存在好几年
答案 1 :(得分:1)
感谢@OlafDietsche和@ÁlvaroGonzález的快速帮助。我在这里保留他们的建议,所以像我这样的人会发现它很有用。
问题在于我的目标,而不是语法。通过他们的评论和回答,我发现我的两个目标是相互矛盾的。
我配置.htaccess
同时执行页面重定向和IP块。但是,如果我阻止(几乎)所有人访问该网站,页面重定向毫无意义。
.htaccess
中所需的配置是:
#Rewrite to www
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com[nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
#301 Redirect Old File
Redirect 301 /index.html /maintenance.html