【问题标题】:Whatever I do, .htaccess won't do the job无论我做什么,.htaccess 都不会完成这项工作
【发布时间】:2016-06-22 07:17:55
【问题描述】:

使用.htacess 文件对我来说一直是一个非常令人沮丧的经历。有人请帮忙。

这就是我想要实现的目标:

  • 我运行的是 Ubuntu 14.04。
  • 将我的整个网站 (example.com) 重定向到 maintenance.html 页面。
  • 阻止除一个IP以外的其他所有人,例如,我只需要允许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
  • 我是否应该在上述任何config 文件中添加<IfModule mod_rewrite.c></IfModule> 作为页眉和页脚?

很抱歉问了太多问题,但我真的很想知道这一切。 提前致谢。

【问题讨论】:

  • deny from 没有任何东西是行不通的。我想这是一个错字。
  • 永远不要使用R=301 进行测试。 Redirect 也是如此。
  • 文件中的更改取决于您的系统(debian、ubuntu、wamp - 都有不同的默认配置) - Deny from 应该是 Deny from All
  • @CodeBrauer 我添加了信息。我正在使用 Ubuntu 14.04。我尝试了deny from all,但它仍然无法正常工作。所以我也编辑了那部分。
  • 我尝试使用 deny from all,它对 IP Block 目标有效。但是页面重定向仍然不起作用。感谢@CodeBrauer 和@OlafDietsche。

标签: html apache .htaccess


【解决方案1】:

上述每个文件的位置是否正确?在什么情况下, 页面以500 internal server error结束?

“500 内部服务器错误”消息表示存在错误,您需要检查服务器日志以了解确切的详细信息。 Apache 不会显示任何人都可以看到的错误信息。

我应该做些什么改变

这取决于问题所在。如果问题是“500 Internal Server Error”那意味着我们仍然不知道问题是什么。

是否需要运行 a2enmod rewrite?

该命令启用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 已经存在好几年了

【讨论】:

  • 是的,我使用的是 Apache 2.4.7。我会尝试Require500 Internal Server Error 在我查看 apache 错误日志时得到了解决。上面写着/var/www/html/.htaccess: Invalid command '//Rewrite', perhaps misspelled or defined by a module not included in the server configuration。所以我修改了那部分。一切正常,apache没有更多错误。但是页面重定向到maintenance.html 不会发生。非常感谢您在 @AlvaroGonzalez 上花费的时间。
【解决方案2】:

感谢@OlafDietsche 和@ÁlvaroGonzález 的快速帮助。我将他们的建议保留在这里,以便像我这样的人会发现它很有用。

问题在于我的目标,而不是语法。通过他们的 cmets 和答案,我开始知道我的两个目标是相互矛盾的。

我将.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2022-11-14
    • 2015-08-25
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多