解决Prestashop开启Friendly URL Rewrite静态后前台都是404的问题

在本地调试一切都没问题,在服务端生产环境里面各种问题产生,这个问题也困扰我很久,不过最终也搞定了,总结一下思路就是下面几点:

1.检查Apache mod_rewrite模块

如果没有开启则需要开启并重启apache

sudo a2enmod rewrite
udo systemctl restart apache2

这里补充一下,如果关闭该模块则运行

sudo a2dismod rewrite

检查开启状态

apachectl -M
Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cloudflare_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 filter_module (shared)
 mime_module (shared)
 mpm_prefork_module (shared)
 negotiation_module (shared)
 php_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)

2.站点conf文件配置

这一点非常重要,也是大部分出错翻车的地方,检查站点配置文件中的AllowOverride参数,如果事None 则改为All,原因是prestashop开启Friendly URL后会在根目录生成.htaccess文件需要覆盖conf文件中的配置。

AllowOverride All

3.目录权限引起的错误

如上所说,站点根目录需要有写入权限来提供.htaccess文件的生成,所以根目录一定要具有写入权限

4.SSL引起的错误

这里是我翻车的地方,由于我长期使用nginx环境,而prestashop官方推荐使用apache,和nginx不一样,certbo证书工具会为apache生成出独立的名为xxx-ssl.conf配置文件,而不像nginx那样在原有的conf文件中追加内容,该文件存放于站点配置文件相同的目录中/etc/apache2/sites-avaiable/,因此如果开启了SSL,还需在ssl配置文件中注意第二点中AllowOverride参数的问题,也就是说修改了两个地方,对应80443端口的情况。

最后小提示

修改conf配置文件修改后一定要重启apache2才可以生效,而重启之前一定要先检查语法问题,免得服务端出错影响业务

apachectl configtest
Syntax OK

献上apache2的conf标准配置文件

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    <Directory /var/www/example.com/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <IfModule mod_dir.c>
        DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
    </IfModule>
</VirtualHost>

Post Comment