Mod rewrite Apache2-似乎重写条件并不总是适用

Mod rewrite Apache2-似乎重写条件并不总是适用,mod-rewrite,apache2,browser-refresh,Mod Rewrite,Apache2,Browser Refresh,我只想在图像文件不存在时重定向到/lost/index.php。 当我尝试它时,它似乎对浏览器刷新不起作用 如果我使用服务器上存在的文件调用它 /images/image1.jpg 它向我显示一个文件(好-文件存在) 但是如果我刷新浏览器,它会将我重定向到/lost/index.php(这很糟糕) 在我的规则之下 RewriteEngine On RewriteLog /var/log/apache2/rewrite.log RewriteLogLevel 3 RewriteC

我只想在图像文件不存在时重定向到/lost/index.php。 当我尝试它时,它似乎对浏览器刷新不起作用 如果我使用服务器上存在的文件调用它

/images/image1.jpg
  • 它向我显示一个文件(好-文件存在) 但是如果我刷新浏览器,它会将我重定向到/lost/index.php(这很糟糕)
在我的规则之下

RewriteEngine On
RewriteLog      /var/log/apache2/rewrite.log
RewriteLogLevel 3

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/images/(.*)$    /lost/index.php?image=$1 [L,R]
有什么想法吗?

所以我解决了

如果在元素中定义重写规则,它们应该如下所示

<Directory /var/www/local.example.com>

        ...
        RewriteEngine On

        RewriteCond %{REQUEST_FILENAME} !-l
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^images/(.*)$    /lost/index.html?image=$1 [R]
</Directory> 
这是因为,如果在每服务器上下文中使用(即,在请求映射到文件系统之前),SCRIPT_FILENAME和request_FILENAME不能包含完整的本地文件系统路径,因为在此处理阶段路径未知。在这种情况下,两个变量最初都将包含REQUEST_URI的值。为了在每个服务器上下文中获取请求的完整本地文件系统路径,请使用基于URL的前瞻%{LA-U:request_FILENAME}来确定request_FILENAME的最终值


同样重要的是,这两种情况下的模式必须不同。在第二种情况下,它必须以“/”开头,而在第一种情况下则不能。这是因为请求文件名在第二种情况下的开头包含“/”,但在第一种情况下不包含“/”

将图像请求转发到html页面是个坏主意。当您将图像用作
时,浏览器需要图像而不是文本。重定向到文本
未找到的图像
@Cheery这只是一个示例,我已将其更改为index.php-假设我要生成此缺少的图片检查浏览器在请求中发送的内容。规则看起来正确,不应依赖于刷新。或者,至少可以查看rewrite.logy,我猜测您的浏览器在测试时的某个阶段缓存了重定向,因此它会间歇性地使用缓存解析URL。我使用了类似的配置,没有任何问题。如果我使用%{LA-U:REQUEST\U FILENAME},一切都很好。下面是doc中的一个片段:如果在每服务器上下文中使用(即,在请求映射到文件系统之前),SCRIPT_FILENAME和request_FILENAME不能包含完整的本地文件系统路径,因为在此处理阶段路径未知。在这种情况下,两个变量最初都将包含REQUEST_URI的值。为了在每个服务器上下文中获取请求的完整本地文件系统路径,请使用基于URL的前瞻%{LA-U:request_FILENAME}来确定request_FILENAME的最终值。
RewriteEngine On
RewriteCond %{LA-U:REQUEST_FILENAME} !-l
RewriteCond %{LA-U:REQUEST_FILENAME} !-d
RewriteCond %{LA-U:REQUEST_FILENAME} !-f
RewriteRule ^/images/(.*)$    /lost/index.html?image=$1 [R]