我们的网络服务器如下mod_rewrite的子目录中的
/path-to-docdir [Contains main pages]
./app/ [Some application not directly related to the main content]
主要页面,并提供精美的结构。在app目录我试图使用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。我试着用index.php
代替$1
,并且确实会显示页面,但是页面内部对脚本文件的引用会导致错误。
经过一番搜索左右,我添加了以下行:
RewriteBase /app/
而这似乎并没有任何区别。我还应该注意到,如果我将app目录作为服务器根目录,则一切都按预期工作。
我也打开了调试日志记录,我可以从中收集的是,服务器确实进入重定向循环。
[perdir /path-to-docdir/app/] internal redirect with /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>
您的答复非常感谢。是的,我确实需要重写条件。是的,你是对的,第一条规则是多余的。我编辑了我的答案。 – sumansudha
好的,如果您发现这个有用,请立即/接受 – megaflop
虽然解决方案并没有完全起作用。我确实觉得它很有用,但我很抱歉我没有足够的积分来点赞。 – sumansudha