【问题标题】:mod_rewrite condition not firing?mod_rewrite 条件没有触发?
【发布时间】:2011-04-05 20:41:22
【问题描述】:

在重定向用户之前,我想检查重定向到文件是否确实存在。现在,当我添加当前已注释掉的位时,以下代码仍然可以正常工作,它完全跳过了重写规则。

<IfModule mod_rewrite.c>   
  RewriteEngine on    
  RewriteBase /   
  # RewriteCond cache/$1.html -f      
  RewriteRule ^([^/]+)/?([^/]*) cache/$1.html [L]    
<IfModule>     

我已经为此苦苦挣扎了三天,任何帮助将不胜感激!!!

【问题讨论】:

  • 我认为在 RewriteCond 运行时没有填充 $1。你可能需要在那个之前添加另一个 RewriteCond 来填充 $1,或者类似的东西。
  • Frank Farmer,如果您愿意提供附加规则作为答案..

标签: regex apache mod-rewrite cache-control clean-urls


【解决方案1】:

# RewriteCond cache/$1.html -f 中,$1 没有引用任何内容,因此它将跳过您的 RewriteRule。

试试

RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI}.html -s

RewriteCond Documentation

【讨论】:

  • 我一回到家就测试这个,但我想知道你的规则最后是否需要一个 .html,因为我实际上将这个确切的模式重定向,example.com/userexample.com/cache/user.html
  • 我试过这个,但不幸的是它不起作用..我不知道为什么。无论如何要导出规则指向的位置,以进行手动检查?
  • 您可以启用RewriteLog 看看它为什么不起作用
【解决方案2】:

我的第一印象是检查 cache/$1.html 是否存在,并且您没有意外地从 myserver.com/index.html -> 重定向到 -> myserver.com/cache/index.html.html

【讨论】:

  • cache/$1.html 确实存在,因为当我删除条件时 RewriteRule 会显示文件,我想因为我已经将重定向到文件的地址与预先签入的文件相同条件,它应该检查同一个文件...但是由于某种原因,它没有在条件中找到它,所以很混乱。
猜你喜欢
  • 2016-05-24
  • 1970-01-01
  • 2018-09-13
  • 2021-09-26
  • 2011-09-04
  • 1970-01-01
  • 2013-02-12
  • 2019-09-16
  • 1970-01-01
相关资源
最近更新 更多