我正在尝试将所有请求路由到 /web/index.php
(前端 Controller ),同时直接提供静态文件(如果存在)。
以下.htaccess 文件
取自Symfony 2 应用程序,并且看起来工作正常。请求被发送到 ./index.php
,我可以访问像 ./web/css/style.css
这样的静态文件。我正在使用一个共享主机(不是一个好主机),这个 .htaccess
似乎是唯一一个工作(this 将导致 500 错误)。
如何将所有请求路由到 /web
文件夹?看来我需要更改 E=BASE
变量中的某些内容,我已经尝试过 [E=BASE:%1/web]
但它不起作用。
我对重写规则有一点了解,你能给我指明正确的方向吗?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
# Rewrite all other queries to the front controller.
RewriteRule .? %{ENV:BASE}/index.php [L]
</IfModule>
最佳答案
我可能离题太远了...但这不就是:将最后一行更改为:
RewriteRule .? %{ENV:BASE}/web/index.php [L]
对于静态文件,它需要在您的/web 文件夹中查找以检查该文件是否存在。目前 RewriteCond %{REQUEST_FILENAME} -f
只是检查请求的文件路径是否存在。
尝试在 RewriteCond %{REQUEST_FILENAME} -f 之前加入一个 RewriteBase 命令:
RewriteBase /web/
RewriteCond %{REQUEST_FILENAME} -f
关于php - 使 .htaccess 使用前端 Controller 重写对/web 的所有请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556417/