解决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
参数的问题,也就是说修改了两个地方,对应80和443端口的情况。
最后小提示
修改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>