Php 使用.htaccess隐藏.pdf扩展名以避免循环

Php 使用.htaccess隐藏.pdf扩展名以避免循环,php,.htaccess,pdf,Php,.htaccess,Pdf,我有一点愚蠢的必要将指向PDF文件的链接伪装成带有PDF文件名作为参数的PHP文件 比如: 客户请求xxxx.pdf文件。 服务器接收到请求,但没有返回xxxx.pdf,而是转到yyyy.php或任何扩展名。 php有一个iframe,在其中加载PDF文件。 问题是我设法做到了第二点。但是当我试着做第三点的时候。它要么循环,要么找不到文件 我想用一个自定义扩展名来模拟另一个文件,以便不循环,但它仍在循环 我有以下访问权限: AddType application/pdf .vie

我有一点愚蠢的必要将指向PDF文件的链接伪装成带有PDF文件名作为参数的PHP文件

比如:

客户请求xxxx.pdf文件。 服务器接收到请求,但没有返回xxxx.pdf,而是转到yyyy.php或任何扩展名。 php有一个iframe,在其中加载PDF文件。 问题是我设法做到了第二点。但是当我试着做第三点的时候。它要么循环,要么找不到文件

我想用一个自定义扩展名来模拟另一个文件,以便不循环,但它仍在循环

我有以下访问权限:

AddType application/pdf         .view
RewriteRule ^(.*)\.pdf$         yyyy.php?filename=$1 [L]
RewriteRule ^(.*)\.view$        $1.pdf [L]
问题是它循环而我一无所获


我不太擅长.htaccess,那么我哪里做错了呢?

您可能需要添加一些东西来防止yyyy.php的引用被重写回php文件。在yyyy.php规则之前添加以下内容:

RewriteCond %{HTTP_REFERER} !yyyy\.php

请注意,引用可以伪造,因此这是人们可以绕过yyyy.php文件的一种方法。

我发现,在检测到.pdf扩展名时,只重定向更容易

所以我基本上是这样做的:

.htaccess检测到PDF扩展名,并重定向到一个php文件,该文件将不带扩展名的文件名作为参数传递。 php文件使用文件名,并使用header和readfile呈现PDF,以避免与.htaccess冲突。 诸如此类:

.htaccess

RewriteRule     ^(.*)\.pdf$     /pdfreader/$1 [L,R=302,NC]
RewriteRule     ^pdfreader/(.*)?$           pdfreader.php?file=$1 [L,NC]
pdfreader.php

$file = $_GET["file"].".pdf";

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $file . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');

@readfile($file);

不适合我,继续骑自行车,我确实找到了一个更简单的解决办法。我打算出版它。