我的web项目的目录结构如下所示:
webroot/
├── web/
│ ├── backend/
│ │ ├── endpoint/
│ │ │ └── endpoint.php
│ │ └── ...
│ └── frontend/
│ ├── app/
│ │ └── ...
│ ├── assets/
│ │ └── ...
│ ├── index.html
│ └── app.js
└── .htaccess
如您所见,我的前端(AngularJS)位于/web/frontend
。为了能够使用更简单的规范网址访问应用,我创建了以下.htaccess
文件,该文件基本上将www.example.com/
映射到www.example.com/web/frontend/
:
RewriteEngine On
RewriteBase /
# 1: css/js/img files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^assets/(.*)$ web/frontend/assets/$1 [QSA,L]
# 2: AngularJS app/files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^app/(.*)$ public/frontend/app/$1 [QSA,L]
# 3: Backend/API -- this rule seems to be ignored
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^endpoint/(.*)$ web/backend/endpoint/$1 [QSA,L]
# 4: redirect to canonical URL
RewriteCond %{THE_REQUEST} public/frontend/
RewriteRule ^web/frontend/(.*) http://<host>/$1 [R=301,L]
# 5: everything else to be routed by AngularJS
RewriteCond %{REQUEST_URI} !web/frontend/
RewriteRule ^(.*)$ /web/frontend/#/$1 [L]
这适用于前端部分,这意味着应用程序 - 包括所有资产 - 由浏览器正确加载。
我正在努力的事情基本上就是后端访问。根据我的理解,我应该能够通过/web/backend/endpoint/endpoint.php?foo=bar
检索/endpoint/endpoint.php?foo=bar
,因为规则#3告诉Apache这样做。
相反,每当我转到/endpoint/endpoint.php?foo=bar
时,服务器都会返回前端的index.html
(这意味着执行了规则#5)。
我错过了什么?
答案 0 :(得分:0)
此规则中存在一些语法错误,请查看。如果您对此进行评论,那么重定向到端点将按预期工作。
# 5: everything else to be routed by AngularJS
RewriteCond %{REQUEST_URI} !web/frontend/
RewriteRule ^(.*)$ /web/frontend/#/$1 [L]
因此您需要使用正确的语法修复规则#5,否则您的php文件将无法映射,并且由于.htaccess文件中的错误,它将不允许执行php文件。