WordPress迁移至AWS Elastic Beanstalk后文章名固定链接404普通链接正常
问题原因
- AWS Elastic Beanstalk的Apache默认配置未开启
AllowOverride All,导致blog目录下的.htaccess重写规则无法生效 - Laravel根目录的默认重写规则会拦截所有请求交给Laravel路由处理,没有将blog目录的请求转发给WordPress处理
修复步骤
步骤1:配置Elastic Beanstalk允许.htaccess规则覆盖
在项目根目录新建.ebextensions文件夹,在文件夹内创建apache.config配置文件,写入以下内容:
files: "/etc/httpd/conf.d/enable_htaccess.conf": mode: "000644" owner: root group: root content: | <Directory "/var/www/html"> AllowOverride All </Directory>
该配置会在环境部署时自动修改Apache的全局配置,允许根目录及子目录的.htaccess文件生效,部署完成后重启Elastic Beanstalk实例即可。
步骤2:修改Laravel根目录的.htaccess规则
在Laravel默认的.htaccess文件最开头新增blog目录排除规则,避免blog路径的请求被Laravel路由拦截:
# 放行blog目录请求交给WordPress处理 RewriteRule ^blog(/.*)?$ - [L]
修改后的根目录.htaccess结构参考:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # 新增的WordPress目录排除规则 RewriteRule ^blog(/.*)?$ - [L] # Laravel默认重写规则 RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/.* RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
步骤3:确认blog目录下的WordPress .htaccess配置正确
blog文件夹内的.htaccess需要写入WordPress子目录默认重写规则:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /blog/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /blog/index.php [L] </IfModule> # END WordPress
步骤4:刷新WordPress固定链接缓存
登录WordPress后台,进入「设置」-「固定链接」页面,直接点击「保存设置」即可,无需修改现有配置,WordPress会自动刷新重写规则缓存,生效后自定义固定链接即可正常访问。
内容的提问来源于stack exchange,提问作者Tarun Kumar
相关产品推荐
相关产品推荐

