我遇到重定向问题。现在我的地址有一页,如:
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
这样的长规则。
答案 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
(正如您的原始指令所做的那样)。包括对现有文件和目录的请求 - 如果这是一个问题?