如何从WordPress网址中移除index.php?已尝试多方案仍遇404
兄弟,我太懂这种卡壳的憋屈感了!既然你已经把官方文档和Stack Overflow的常规操作都试了个遍,那咱们来揪几个容易被忽略的细节,大概率能解决问题:
检查
.htaccess的权限、路径和内容
你的WordPress目录是blog,所以.htaccess必须放在blog文件夹里,而且权限要设为644(确保Apache能读取)。里面的规则要对应你的目录,正确内容应该是:# 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重点注意
RewriteBase必须是/blog/,很多人这里写错成根路径,直接导致404。确保Apache虚拟主机允许
.htaccess覆盖
找到你网站的虚拟主机配置文件(通常在/etc/apache2/sites-available/目录下),找到对应<Directory>块,把AllowOverride改成All,比如:<Directory /var/www/html/blog/> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory>修改完一定要重启Apache:
sudo systemctl restart apache2(Ubuntu/Debian)或者sudo service httpd restart(CentOS/RHEL)。核对WordPress后台的站点URL设置
登录WP后台到「设置-常规」,确认「WordPress地址(URL)」和「站点地址(URL)」都是http://你的域名/blog(比如http://example.com/blog),绝对不要带index.php。如果后台因为404进不去,直接修改blog/wp-config.php,添加这两行:define('WP_HOME','http://你的域名/blog'); define('WP_SITEURL','http://你的域名/blog');清空缓存再测试
浏览器缓存可能会坑你,按Ctrl+Shift+R强制刷新页面;如果用了CDN或者WP缓存插件(比如WP Rocket),也得把缓存清干净。再确认mod rewrite真的生效
在blog目录下建个test.php,内容写:<?php phpinfo(); ?>访问
http://你的域名/blog/test.php,搜索mod_rewrite,确认它在「Loaded Modules」列表里。或者在.htaccess加个测试规则:RewriteRule ^test$ test.php [L],访问http://你的域名/blog/test,如果能打开test.php就说明rewrite没问题。
要是这些都试过还是不行,可以开启Apache的rewrite日志排查具体错误,但那对新手有点复杂,先把上面的步骤走一遍,应该能解决问题!
内容的提问来源于stack exchange,提问作者cnu

