首页 > 解决方案 > Slim 3 - 使用重写规则从 url 中删除子目录

问题描述

我在 A2Hosting 上有一个共享主机,我最近将我的主域public_html/public_html/subdir/

这是结构:

/public_html
 /subdir(site files of main domain)
  /api
  index.php  

我当前的 htaccess(public_html) 是:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.
RewriteRule ^(.*)$ /subdir/$1 [L]

当我之前调用我的 APi 时:domain.com/api/

但现在是:domain.com/subdir/api/

我的 htaccessapi是:

RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

如何删除 url 中的“子目录”以保持我的 api 像以前一样?但是仍然使用我当前的 htaccess 将根指向我的子目录?

谢谢

标签: apache.htaccessurl-rewritingslim-3

解决方案


/api一种方法是从根目录中的主 .htaccess 文件重写,如下所示:

RewriteEngine On
RewriteBase /
RewriteRule ^api/(.*)$ ../subdir/api/$1 [R,L,QSA]

新 /subdir/api 文件夹中的 .htaccess 文件可以保持原样。只有 RewriteBase 需要调整。

/api如果出于某种原因保留它,另一种方法是从以前的文件夹重写:

RewriteEngine On
RewriteBase /api
RewriteRule ^(.*)$ ../subdir/api/$1 [L]

推荐阅读