2015-06-20 197 views
1

我想通过在.htaccess中使用RewriteRule使URL更好看,但它不起作用。用.htaccess重写不起作用

这种情况。我有一个根文件夹,里面有一个名为pdf.php的PHP文件。该文件中的脚本向用户发送PDF文件,该名称在URL中作为变量提供。 PDF文件位于名为pdf的文件夹中,放在根目录中。该文件夹受到保护,因此只能通过使用该脚本来获取PDF文件。所有这些都是出于安全原因

例如,当您转到http://example.com/pdf.php?file=pdf/File.pdf时,可以下载PDF文件,其中pdf/File.pdf是PDF文件的路径。这工作正常。当你只需要去http://example.com/pdf/File.pdf时,我希望它能够工作,所以URL必须被重写为前面提到的那个。

我试图用一个生成器来制作一个RewriteRule,但它不起作用。 以下规则位于文件夹pdf中的.htaccess文件中。将它放在根中也不起作用。

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^pdf/([^/]*)$ /pdf.php?file=pdf/$1 

保护文件夹pdf如下。

ErrorDocument 403 http://example.com/ 
Order deny,allow 
Deny from all 
+0

附上一组源和目标地址的你是后。你迄今为止给出了什么规则? –

+0

我用.htaccess文件中的行改变了我的帖子。 – TB308

回答

0

尝试在根目录的.htaccess验证码:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 

# to convert spaces to hyphens 
RewriteRule "^(pdf)/(\S*) +(.*)$" /$1/$2-$3 [L,NE,R=302] 

RewriteRule ^(pdf/.+)$ /pdf.php?file=$1 [L,QSA,B,NC] 
+0

我做了你所说的,但它不起作用。由于PDF文件位于受保护的文件夹中,所以仍然出现403错误,这意味着重定向不起作用。还有什么我可以尝试? – TB308

+0

保护线现在在第一篇文章中。当我删除它们时,它看起来像你的RewriteRule的工作,但只适用于文件名中只有一个单词的PDF文件。当名称有两个或更多个单词并用空格分隔时,它不起作用。提前致谢! – TB308

+0

不幸的是它仍然是一样的。 – TB308