Apache mod_rewrite 不会从根文件夹重定向到子文件夹

Apache mod_rewrite 不会从根文件夹重定向到子文件夹

首先,我要说的是,我对 Apache 指令几乎一无所知,但我需要在我的项目中使用它们来隐藏文件夹,并隐藏 URL 的 /public 部分。

httpd配置文件

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

我知道 mod_rewrite 已启用,因为同一个项目中还有其他 .htaccess 文件可以正常工作。只有这个文件文件夹似乎没有任何效果。

/public 文件夹中有效的 .htaccess 文件示例

<IfModule mod_rewrite.c>
  Options -Multiviews
  RewriteEngine On
  RewriteBase /php_mvc/public
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule  ^(.+)$ index.php?url=$1 [QSA,L]
</IfModule>

.htaccess 文件不起作用

<IfModule mod_rewrite.c>
  RewriteEngine On RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L]
</IfModule>

(更新)与以前相同的 .htaccess 文件,但重新格式化

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^$ public/ [L]
  RewriteRule (.*) public/$1 [L]
</IfModule>

我的 .htaccess 文件中是否存在任何错误,或者我是否忽略了 Apache 配置中的某些内容以使其无法按预期工作?

请注意,我的目的是将访问者从文件夹并放入民众子文件夹,并隐藏 URL 的 /public 部分,这样localhost/my_site/public就变成了localhost/my_site/

我在 macOS Monterey 上本地运行 Apache,并启用了虚拟主机。我没有使用默认目录,而是将项目放在了其他位置。

httpd配置文件

DocumentRoot "/Users/mihkel/Documents/development/www"
<Directory "/Users/mihkel/Documents/development/www">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride None

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

答案1

似乎我的编辑器 VSCode 试图自动格式化直接放置在每当我保存文件时都会访问该文件夹。

本来应该是:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^$ public/ [L]
  RewriteRule (.*) public/$1 [L]
</IfModule>

...最终结果是:

<IfModule mod_rewrite.c>
  RewriteEngine On RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L]
</IfModule>

但子文件夹中的任何 .htaccess 文件都不存在这种情况。

Apache 大会VSCode 的扩展解决了这个问题,但人们总是可以对 .htaccess 文件使用完全不同的编辑器。

相关内容