我们的网络服务器结构如下
/path-to-docdir [Contains main pages]
./app/ [Some application not directly related to the main content]
主要页面服务良好。在应用程序目录中,我尝试使用 mod_rewrite 将所有页面重定向到index.php
公共目录中
所以请求
/server/app/start/login/ => /server/app/public/index.php
/server/app/start/login => /server/app/public/index.php
/server/app/start/login?name=someone => /server/app/public/index.php?name=someone
前端控制器依赖于REQUEST_URI
字符串的最后两个组件来解释控制器和动作。
为此,我在目录中创建了以下.htaccess
文件app
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ public/ [L]
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
在这里,我发现服务器进入了上述 URL 的重定向循环。我尝试替换$1
为index.php
并且确实打开了页面,但是页面内对脚本文件的内部引用遇到了错误。
经过一番搜索,我添加了以下行:
RewriteBase /app/
这似乎没有任何区别。我还应该注意,如果我将 app 目录设为服务器根目录,一切都会按预期工作。
我还打开了调试日志记录,我可以从中收集到的只是服务器确实进入了重定向循环。
[perdir /path-to-docdir/app/] 内部重定向 /app/public/public/public/public/public/public/public/public/public/public/public/start/login/ [INTERNAL REDIRECT]
我不确定从哪里开始研究这一点,因此非常感谢任何帮助或让我更进一步的指示。
编辑:
这个 htaccess 文件对我有用 - 如果其他人正在寻找解决方案。显然,我错过了重写条件
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ public/index.php?$1 [L]
</IfModule>