解决问题

在我个人建站过程中,这个博客和我的首页死活都开启不了静态链接,找了很多的办法,typechowordpress 的各种设置方法和 .htaccess 都测试无效,于是乎我将焦点放在了服务器上,也确实通过修改 httpd.conf 文件解决了这个问题。如果大家也碰到了死活都设置不好固定链接的问题,不妨接着看下我下面的分析。

首先介绍下我的服务器配置文件结构:

httpd.conf ../site_avaliable/www.conf
../site_avaliable/blog.conf
../conf.d/*
../conf.modules.d/*

可以看到我配置了虚拟服务器,在 httpd.conf 中:

<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

../site_avaliable/www.conf 中:

<Directory "/var/www/www/public_html">
    # 防止网站目录显示
    Options FollowSymLinks
    AllowOverride all
    Require all granted
</Directory>

可以看到这两个目录是包含的,于是我将 httpd.conf 中的 AllowOverride None 修改为 AllowOverride all,然后解决了问题。

原理分析

问题解决,我回顾下我的解决思路,也顺便分析下原因。首先如果使用的是 typecho,如果在后台启用“是否使用地址重写功能”失败,可以在网站(该 typecho 程序根目录)创建 .htaccess 文件,写入以下内容:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>

重启服务器,强制开启“是否使用地址重写功能”(如果提示需要强制开启),此时如果依旧未生效,那就要考虑是否是服务器的配置问题了。在此介绍下为什么我在 <VirtualHost><Directory>...</Directory></VirtualHost> 中写的 AllowOverride all 会有无效呢?我在 Apache 官方文档中找到了答案,下面是其翻译:

尽管大多数指令可以放在这些部分中的任何部分中,但某些指令在某些情况下没有意义。例如,控制进程创建的指令只能放在主服务器上下文中。要查找哪些指令可以放在哪些部分中,请检查指令的上下文。有关详细信息,我们提供有关目录,位置和文件部分如何工作的详细信息。

简单来说就是 AllowOverride 配置只有写在 httpd.conf 主配置文件中才能生效。那为了安全起见,我们就应该将配置文件调整如下:

  1. httpd.conf 文件中,将 /var/www 目录设置为 AllowOverride None

    <Directory "/var/www">
        AllowOverride None
        # Allow open access:
        Require all granted
    </Directory>
  2. httpd.conf 文件中,添加 /var/www/www/public_html 的配置:

    <Directory "/var/www/www/public_html">
        # 防止网站目录显示
        Options FollowSymLinks
        AllowOverride all
        Require all granted
    </Directory>
  3. ../site_avaliable/www.conf 中删除相关配置。

参考资料:

https://httpd.apache.org/docs/2.4/mod/directive-dict.html#Context
https://serverfault.com/questions/203550/htaccess-is-ignored-even-though-virtualhost-has-allowoverride-all

Last modification:November 8th, 2018 at 09:30 pm
If you think my article is useful to you, please feel free to appreciate