htAccess 重定向在相对路径中不起作用


htaccess redirects not working in relative paths

我正在尝试从所有文件重定向到模板文件。但是重定向仅在我指定URL时才有效

例如:

不起作用(不重定向)

Options -Indexes
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /template.php?page=$1 [L,QSA]

作品(重定向至 http://domain.com/versioned/template.php?page=index.html)

Options -Indexes
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) http://domain.com/versioned/template.php?page=$1 [L,QSA]

第二个选项是更改浏览器中的URL。我需要保留原始网址。

谢谢

问题出在

RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f

如果我退出它,它可以工作,但它不是返回 URL 中的当前文件,而是始终返回模板.php

如果 htaccess 文件位于 versioned 目录中,则不希望规则目标中使用前导斜杠:

Options -Indexes
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) template.php?page=$1 [L,QSA]

此规则的目标 template.php?page=$1 中的相对 URL 路径告诉mod_rewrite将请求重写到此 URL 路径,该路径位于 htaccess 文件所在的路径内。当您将目标作为 /template.php?page=$1 时,它假定一个绝对的 URL 路径,相当于:http://domain.com/template.php?page=foo