Apache Rewrite Engine 将所有请求重定向到 index.php

Apache Rewrite Engine 将所有请求重定向到 index.php

我在 Apache Web 服务器上有一个 PHP Web 应用程序。

服务器上 Web 应用程序的路径是:/var/www/html/intern/organisation/example_app

Web 应用程序的 URL 为:
https://www.example.de/org1/intern/example_app/

我希望所有请求都https://www.example.de/org1/intern/example_app/view1/重定向到

https://www.example.de/org1/intern/example_app/index.php

在我的本地 XAMPP 服务器上,我使用以下 .htaccess 文件,它可以用于此目的:

RewriteEngine On
RewriteBase /example_app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]

但我不知道该文件在服务器上应该是什么样子?我在服务器上也使用 httpd.conf。我想知道该文件是否会干扰.htaccess下面的文件:/var/www/html/intern/organisation/example_app/

有人知道如何在服务器上配置重写吗?

答案1

.htaccess子目录中的文件应/org1/intern/example_app/如下所示:

DirectoryIndex index.php

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

.htaccess然后,您可以在本地和实时服务器上使用同一个文件,只要它位于example_app/子目录中即可。

只要该文件与您想要重写的文件.htaccess位于同一目录中,那么您就不需要该指令。index.phpRewriteBase

DirectoryIndex指令可能已在服务器配置中设置为index.php,因此这里可能不需要它,但为了完整性,应该将其包括在内。当请求应用程序目录本身时(即https://www.example.de/org1/intern/example_app/),它是必需的。

请注意,这是“内部重定向”,通常称为“重写”。如果您简单地说“重定向”,则意味着“外部 (HTTP) 重定向”,这完全是另一回事。


我想知道该文件是否会干扰.htaccess file下面的文件:/var/www/html/intern/organisation/example_app/

多个.htaccess文件(和服务器配置)可能会发生冲突。但是,子配置中的 mod_rewrite 指令(在同一个语境, IE。目录) 将完全覆盖父配置中的 mod_rewrite 指令(默认)。


在旁边:(或可能不是)

服务器上 Web 应用程序的路径是:/var/www/html/intern/organisation/example_app

Web 应用程序的 URL 为:https://www.example.de/org1/intern/example_app/

虽然有点令人困惑,但文件路径和 URL 路径似乎不匹配?您是否Alias在服务器配置中进行了额外的重写或配置,或者example_app文件路径中的目录与example_appURL 路径中的目录不同?

答案2

非常感谢您的详细解答。重写规则不是问题。

问题很简单。整个 .htaccess 不起作用,因为我必须在 httpd.conf 上激活 AllowOveride。

相关内容