使用mod_rewrite从exisiting文件夹内部重定向到文档根文件

时间:2018-02-03 15:47:04

标签: apache .htaccess redirect mod-rewrite url-rewriting

我想创建一个内部重写,它从文档根目录中提供.php文件。

以下示例说明了它应该如何工作:

  

https://example.com/test应加载文件https://example.com/template.php?a=test   https://example.com/test1应加载文件https://example.com/template.php?a=test1

我已经写过一个RewriteRule:

RewriteRule ^([a-z]+)$ template.php?a=$1 [NC,END]

此规则适用于一个案例。如果文件夹存在,在此示例中为“test”,则会导致重定向循环。我认为这种行为的原因是Web服务器导航到“/ test”然后查找“template.php”。由于没有文件(因为“template.php在文档根目录中),重定向失败。

如何解决此问题?如果模式匹配,则无论文件夹是否存在,都应该始终存在内部重定向。

1 个答案:

答案 0 :(得分:0)

this问题的帮助下,即使文件夹存在,我也想出了如何重写:我已将DirectorySlash Off添加到我的.htaccess。

来自apache documentation

  

DirectorySlash指令确定mod_dir是否应该修复指向目录的URL。

     

通常,如果用户请求没有尾部斜杠的资源,   指向一个目录,mod_dir将他重定向到同一个目录   资源,但有斜杠[...]

此外,我添加了另一个重写规则,删除了最后一个尾部斜杠。

RewriteRule ^(.*)/$ /$1 [L,R=301]

现在以下工作:

  

https://example.com/test加载文件https://example.com/template.php?a=test

     

https://example.com/test/重定向到https://example.com/test   加载文件https://example.com/template.php?a=test