php - 使 .htaccess 使用前端 Controller 重写对/web 的所有请求?

标签 php apache .htaccess mod-rewrite silex

我正在尝试将所有请求路由到 /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/

相关文章:

php - 如何使用 PHP 发布到 Facebook 页面

php - 获取MySql数据并放入多维数组中

php - CodeIgniter 500 内部服务器错误

php - .htaccess 重定向主域和附加域问题

.htaccess - 使用 htaccess 删除子目录中的 codeigniter index.php

php - 使用MySql从逗号分隔的字符串中提取行

php - 添加密件抄送后,Laravel 邮件会发送两次电子邮件

php - 什么会导致 PHP 变量被服务器重写?

java - 如何通过浏览器提供本地文件

php - 在 PHP : what can I expect? 中从持久连接切换到非持久连接