如何让WordPress与自定义MVC应用同站共存并隐藏自定义应用的public访问路径
如何让WordPress与自定义MVC应用同站共存并隐藏自定义应用的public访问路径
看起来你正处于从WordPress逐步迁移到自定义MVC应用的过渡阶段,目前两者单独运行都正常,但卡在了URL路径的优化上——不想让用户看到自定义应用的public前缀对吧?我结合你的场景整理了两个可行的解决方案:
方案1:针对路由创建目录转发(适合过渡阶段)
这是你已经尝试验证有效的临时方案,非常适合你这种后续会完全替换WordPress的场景,操作简单直接:
- 在
public_html根目录下,创建和自定义应用路由对应的文件夹,比如要实现/products路径,就新建public_html/products目录 - 在这个新建的目录里创建
.htaccess文件,写入以下规则:
<IfModule mod_rewrite.c> Options +FollowSymLinks RewriteBase / RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ public/index.php [QSA,L] </IfModule>
这样当你访问https://www.example.com/products/index时,请求会被悄悄转发到自定义应用的public/index.php处理,URL里完全看不到public,也不会触发WordPress的404页面。
方案2:修改根目录.htaccess规则(更优雅的长期方案)
如果后续自定义应用的路由越来越多,逐个创建目录太繁琐,可以直接修改WordPress所在的public_html/.htaccess,让指定前缀的请求优先交给自定义应用处理:
- 打开
public_html/.htaccess,在# BEGIN WordPress这一行之前添加以下规则:
# 优先处理自定义MVC应用的路由请求 <IfModule mod_rewrite.c> RewriteEngine On # 这里把你自定义应用的所有路由前缀列出来,用|分隔,比如products|users|dashboard RewriteCond %{REQUEST_URI} ^/(products|users)/ [NC] RewriteRule ^(.*)$ public/index.php?/$1 [NC,QSA,L] </IfModule>
- 保持自定义应用
public/.htaccess的规则不变:
Options -Indexes RewriteEngine on RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,L,R] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [NC,QSA,L]
这样配置后,所有匹配前缀的请求会先被转发到自定义应用,其他请求依然走WordPress的路由,完美实现同站共存且隐藏public前缀。
小提示
- 后续完全迁移到自定义应用时,只需要把根目录的
.htaccess替换成自定义应用的规则,删掉WordPress相关内容即可 - 确保你的服务器开启了
mod_rewrite模块,不然所有重写规则都不会生效 - 修改完.htaccess后,建议用隐身窗口测试,避免浏览器缓存影响结果
内容来源于stack exchange
相关产品推荐
相关产品推荐

