我想创建一个内部重写,它从文档根目录中提供.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在文档根目录中),重定向失败。
如何解决此问题?如果模式匹配,则无论文件夹是否存在,都应该始终存在内部重定向。
答案 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