WordPress站点通过.htaccess配置实现带后缀路径的URL加载指定页面且保留URL不返回404的问题
WordPress站点通过.htaccess配置实现带后缀路径的URL加载指定页面且保留URL不返回404的问题
我明白你的需求了——你希望用户访问website.com.au/pre-registration/任意值/这类URL时,实际加载的是website.com.au/pre-registration/页面,但浏览器地址栏里的URL保持不变,也不会返回404错误。结合你现有的.htaccess配置,我来给你一个可行的解决方案:
首先,你需要在WordPress自动生成的规则之前添加自定义的Rewrite规则,因为WordPress的默认规则会优先尝试解析URL为文章、页面或自定义路由,我们得先拦截这类带后缀的URL请求。
修改你的.htaccess文件,具体如下:
# BEGIN Custom Rule <IfModule mod_rewrite.c> # 匹配pre-registration/后带任意值的URL,内部转发到目标页面 RewriteRule ^pre-registration/(.+)/$ /pre-registration/ [L,NC,QSA] </IfModule> # END Custom Rule # BEGIN WordPress # The directives (lines) between "BEGIN WordPress" and "END WordPress" are # dynamically generated, and should only be modified via WordPress filters. # Any changes to the directives between these markers will be overwritten. <IfModule mod_rewrite.c> Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods "GET,PUT,POST,DELETE" Header set Access-Control-Allow-Headers "Content-Type" RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
规则说明:
^pre-registration/(.+)/$:正则表达式匹配以pre-registration/开头、后面跟着任意字符((.+))且以斜杠结尾的URL/pre-registration/:指定实际要加载的目标页面路径[L,NC,QSA]:L:表示这是最后一条要执行的规则,避免后续规则干扰NC:不区分URL的大小写,兼容性更好QSA:保留原URL中的查询字符串(如果有的话,比如website.com.au/pre-registration/abc/?foo=bar会保留?foo=bar)
重要注意事项:
- 确保你的服务器已经开启了
mod_rewrite模块(大部分主流主机默认都是开启的,如果不确定可以联系主机商确认) - 修改完.htaccess后,登录WordPress后台,进入设置→固定链接页面,不用修改任何设置,直接点击「保存更改」,让WordPress重新刷新路由规则,避免冲突
- 确认你的目标页面的slug确实是
pre-registration,如果slug有变化,要同步修改规则里的路径
这样配置后,用户访问website.com.au/pre-registration/任意参数值/时,浏览器地址栏会保持原URL不变,但服务器内部会加载pre-registration页面,不会返回404错误。
备注:内容来源于stack exchange,提问作者Leonardo Pessatti
相关产品推荐
相关产品推荐

