Brian
Brian

Reputation: 21

mod_speling & mod_rewrite to work together?

    CheckSpelling On

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

The CheckSpelling On (mod_speling) works fine when it’s www.example.com. But it does not work when the Rewrites take place. For example there is a /home/test/www/index.html file. If you do test.example.com/INDEX.html it will not fix to test.example.com/index.html but if you do www.example.com/INDEX.html (there is no /home/www/ folder) it will fix it to www.example.com/index.html.

It seems like it processes through the mod_rewrite first and if it uses rewrite, it doesnt go through checkspelling. I have tried loaded the modules in different orders with no luck.

Upvotes: 2

Views: 2486

Answers (2)

covener
covener

Reputation: 17886

mod_speling and mod_rewrite operate in the same phase when rewrite is used in per-directory context ( or htaccess). This phase runs all participating modules, not the first to take any action.

rewrite in per-directory always acts as if it has the [PT] flag. If your rewrites are not in per-directory context, just add the [PT] flag and use URI's instead of filenames in your substitutions will probably get them interoperating.

Upvotes: 0

Jeremy Stein
Jeremy Stein

Reputation: 19661

mod_speling can't look for spelling alternatives that go through mod_rewrite rules. It should work if you use use a redirect [R], but it looks like you want to hide the actual directories.

You might consider a custom 404 instead of mod_speling.

Upvotes: 0

Related Questions