0

我只想在图像文件不存在时重定向到 /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]

有任何想法吗 ?

4

1 回答 1

0

所以我解决了。

如果您在元素内定义重写规则,它们应该看起来像

<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> 

如果您在(每服务器上下文)之外“全局”定义它们,它们应该看起来像

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] 

这是因为如果在每个服务器上下文中使用(即,在请求映射到文件系统之前) SCRIPT_FILENAME 和 REQUEST_FILENAME 不能包含完整的本地文件系统路径,因为在这个处理阶段路径是未知的。在这种情况下,这两个变量最初都将包含 REQUEST_URI 的值。为了在每个服务器上下文中获取请求的完整本地文件系统路径,请使用基于 URL 的前瞻 %{LA-U:REQUEST_FILENAME} 来确定 REQUEST_FILENAME 的最终值。

同样重要的是——两种情况下的模式必须不同。在第二种情况下,它必须以'/'开头,而在第一种情况下则不是。这是因为 REQUEST_FILENAME 在第二种情况的开头包含“/”,但在第一种情况下却没有

于 2014-10-14T09:16:06.273 回答