Apache的mod_rewrite无法删除尾部斜杠

时间:2017-01-12 01:16:00

标签: php apache .htaccess mod-rewrite trailing-slash

我有一个XAMPP Apache服务器,并添加了一个配置文件来重写带有斜杠的URL并重定向到它们的斜线对应物。

因此,http://example.com/the-audio/之类的网址会被重定向到http://example.com/the-audio。问题是,当目录名只有一个单词时,它不起作用。

所以,http://example.com/audio/没有删除它的斜杠。这对我来说真的很奇怪,并且检查日志看起来好像规则在这种情况下不匹配。

这是我的规则(文件中只有一个)

的.htaccess

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)\/+$
RewriteRule ^ %1 [R=301,L]

这是错误转储

error.log中

[Wed Jan 11 22:13:32.729812 2017] [rewrite:trace3] [pid 1688:tid 1904] mod_rewrite.c(477): [client ::1:52432] ::1 - - [localhost/sid#ba8340][rid#29a2190/initial] [perdir C:/xampp/htdocs/tecnoedu/] strip per-dir prefix: C:/xampp/htdocs/tecnoedu/audio/ -> audio/
[Wed Jan 11 22:13:32.730312 2017] [rewrite:trace3] [pid 1688:tid 1904] mod_rewrite.c(477): [client ::1:52432] ::1 - - [localhost/sid#ba8340][rid#29a2190/initial] [perdir C:/xampp/htdocs/tecnoedu/] applying pattern '^' to uri 'audio/'
[Wed Jan 11 22:13:32.730312 2017] [rewrite:trace1] [pid 1688:tid 1904] mod_rewrite.c(477): [client ::1:52432] ::1 - - [localhost/sid#ba8340][rid#29a2190/initial] [perdir C:/xampp/htdocs/tecnoedu/] pass through C:/xampp/htdocs/tecnoedu/audio/
[Wed Jan 11 22:13:32.730312 2017] [rewrite:trace1] [pid 1688:tid 1904] mod_rewrite.c(477): [client ::1:52432] ::1 - - [localhost/sid#ba8340][rid#33046a0/subreq] [perdir C:/xampp/htdocs/tecnoedu/] pass through C:/xampp/htdocs/tecnoedu/audio/index.php

提前致谢!

1 个答案:

答案 0 :(得分:1)

根据您的日志/audio/是一个现有目录。所以你的规则不会运行,因为第一个条件阻止它在现有目录上运行。删除第一个条件来解决它。

此外,要在现有目录上执行此操作,您需要关闭DirectorySlash,否则服务器将自动添加斜杠。请注意,有some security concern with that