mod_speling& mod_rewrite一起工作?

时间:2009-12-30 06:37:31

标签: apache mod-rewrite apache2 case-insensitive mod-speling

    CheckSpelling On

    RewriteEngine   on
    RewriteCond     %{HTTP_HOST}                      ^([^.]+)\.site\.com$
    RewriteCond     /home/%1/                          -d
    RewriteRule     ^(.+)                              %{HTTP_HOST}$1
    RewriteRule     ^([^.]+)\.site\.com/media/(.*)     /home/$1/data/media/$2
    RewriteRule     ^([^.]+)\.site\.com/(.*)           /home/$1/www/$2

CheckSpelling On(mod_speling)在www.example.com时工作正常。但是当重写发生时它不起作用。例如,有一个/home/test/www/index.html文件。如果您执行test.example.com/INDEX.html,则无法修复test.example.com/index.html,但如果您执行www.example.com/INDEX.html(没有/home/www/文件夹),则会将其修复为www.example.com/index.html。< / p>

它似乎首先通过mod_rewrite处理,如果它使用重写,它不会通过检查。我试过以不同的顺序加载模块而没有运气。

2 个答案:

答案 0 :(得分:0)

mod_speling无法查找符合mod_rewrite规则的拼写替代方案。如果你使用重定向[R]它应该工作,但看起来你想要隐藏实际的目录。

您可以考虑自定义404而不是mod_speling。

答案 1 :(得分:0)

当在每个目录上下文(或htaccess)中使用重写时,

mod_speling和mod_rewrite在相同的阶段运行。此阶段运行所有参与模块,而不是第一个采取任何操作的模块。

每个目录中的

重写始终就像它具有[PT]标志一样。如果您的重写不在每个目录上下文中,只需添加[PT]标志并在您的替换中使用URI而不是文件名可能会使它们互操作。