我的目录结构如下所示:
/
├─ index.html
├─ .htaccess
├── backend/
│ ├── public/
│ │ ├── index.php
我的目标是在根目录中设置 .htaccess 文件,以便任何像
example.com/backend
这样的 URL 都被重定向到 example.com/backend/public
或者换句话说 example.com/backend/index.php
被重定向到 example.com/backend/public/index.php
。 backend
目录包含一个用作API的Laravel项目,我需要通过像example.com/backend/anylaravelroute
这样的url访问它。
这是我当前的 .htaccess 文件:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /backend/public/index.php [L]
</IfModule>
我面临的问题是,虽然此 .htaccess 配置成功将请求重定向到
/backend/public/index.php
,但 PHP 中的 $_SERVER['REQUEST_URI']
仍然包含带有 /backend/
的路径。结果,Laravel 错误地处理路由并返回 404 错误。例如,example.com/backend/api
返回404错误,而example.com/api
可以工作但不是我想要的,laravel中的APP_URL
设置为example.com/backend
并且我正在使用laravel 10.10。
由于特定的限制,我无法通过将公共目录移到 /backend/ 之外来更改目录结构。此外,我无法控制 Apache 配置,解决此问题将阻止对后端目录中文件的任何直接访问,因为所有请求都将重定向到后端/公共,因此不会导致安全问题。 现在,我需要配置 .htaccess 文件以实现所需的行为。有一种替代解决方案,涉及使用符号链接,但它可能会引入其他问题。因此,最好使用 .htaccess 来解决这个问题。
添加以下内容:
# Redirect /backend requests to /backend/public
RewriteRule ^backend(/.*)?$ backend/public/$1 [L]