根文件夹中的 Silex 的 htaccess 无法按预期工作

htaccess for Silex from the root folder not working as intended

我尝试搜索和使用已经发布的解决方案,但目前没有任何效果,我尝试了几乎所有可能的方法,但没有效果。

这些是应用目录:

localhost/
  root/
    data/
    app/
    public/
      index.php
    .htaccess

htaccess 是这样的:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteBase /root/public/
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
</IfModule>

第一个问题是,如果我访问 localhost/root/public,网站会按预期工作,但在 url 中,我仍然看到 'public',我想将其删除。

第二个问题是我的 objective 是从 url localhost/root/ 转到索引,但是现在,如果我转到那里,它只显示文件夹中的文件.

谢谢。

根据要求,这些是我使用的路线:

$app->get('/', function () use ($app) {
    // code
})->bind('home');

$app->get('/about-me', function () use ($app) {
    // code
})->bind('about-me');

你的系统有两个错误。

首先: 位于根文件夹中的 .htaccess 应该用于删除 URL 的 'public' 部分。其代码如下所示:

RewriteEngine On
RewriteRule ^(.*)$ public/ [L]

它基本上抓取每条路线并将其重定向到 public 文件夹,完全如您所愿!

第二: 您应该在“/public”文件夹中创建另一个 .htaccess 文件,以将所有内容重定向到 index.php 文件。其代码应如下所示:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

你应该得到以下结构:

localhost/
  root/
    .htaccess (removes 'public')
    data/
    app/
    public/
      index.php
      .htaccess (forward to index.php)

这应该可以解决您的两个问题。如果是这样,请通过将我的答案标记为解决问题的答案来将问题标记为已完成。如果没有,请评论您遇到的其他问题!