mod_speling & mod_rewrite 可以一起工作吗?
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
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
。
看起来它首先通过 mod_rewrite 进行处理,如果它使用重写,则不会经过拼写检查。我尝试以不同的顺序加载模块,但没有成功。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
mod_speling
无法查找经过mod_rewrite
规则的拼写替代方案。如果您使用重定向 [R],它应该可以工作,但看起来您想隐藏实际的目录。您可以考虑使用自定义 404 而不是 mod_speling。
mod_speling
can't look for spelling alternatives that go throughmod_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.
当在每个目录上下文(或 htaccess)中使用重写时,mod_speling 和 mod_rewrite 在同一阶段运行。此阶段运行所有参与模块,而不是第一个采取任何操作的模块。
每个目录中的重写总是表现得好像它具有 [PT] 标志。如果您的重写不在每个目录的上下文中,只需添加 [PT] 标志并在替换中使用 URI 而不是文件名可能会让它们互操作。
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.