Apache - 重定向 - 路径

时间:2017-10-05 15:36:39

标签: apache .htaccess mod-rewrite

我遇到重定向问题。现在我的地址有一页,如:

http://localhost/Stella/Wiki/index.php

同样在同一目录中,我有.htaccess个文件,该文件应将所有请求重定向到index.php

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/Stella/Wiki/index.php
RewriteRule (.*)$ /Stella/Wiki/index.php?id=$1 [L,QSA]

这种重定向工作非常好,但我想以相对的方式使用它,比如:

RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule (.*)$ /index.php?id=$1 [L,QSA]

就像没有绝对路径一样,因为我将拥有许多子文件夹,而且我不想拥有像/xxx/xxx/xxx/xxx/index.php这样的长规则。

你可以帮我解决这个问题吗?我不知道该怎么办,或者它是否可能?

1 个答案:

答案 0 :(得分:1)

RewriteCond %{REQUEST_URI} !^/Stella/Wiki/index.php
RewriteRule (.*)$ /Stella/Wiki/index.php?id=$1 [L,QSA]

如果.htaccess位于/Stella/Wiki/.htaccess,那么您可以编写以下指令:

RewriteRule ^index\.php$ - [L]
RewriteRule (.*) index.php?id=$1 [L,QSA]

正如您所建议的,现在使用 relative 路径。请注意,相对路径不以斜杠开头。如果你使用斜杠前缀,那么它将是root-relative(即相对于站点的文档根目录)。

在每个目录.htaccess文件中使用相对路径时,最后会添加目录前缀(.htaccess文件所在的文件系统路径)。因此,index.php位于.htaccess文件所在的目录中。您可以使用RewriteBase指令覆盖它。

然而,这与您的指令略有不同。如果我们尚未请求目标URL,则只处理条件而不处理该指令。我们有一个例外,如果已经请求了该URL,则会阻止处理任何其他指令。

但请注意,这会将所有请求定向到index.php(正如您的原始指令所做的那样)。包括对现有文件和目录的请求 - 如果这是一个问题?