用 .htaccess 重写不起作用
Posted
技术标签:
【中文标题】用 .htaccess 重写不起作用【英文标题】:Rewriting with .htaccess doesn't work 【发布时间】:2015-09-06 15:42:05 【问题描述】:我正在尝试通过在 .htaccess 中使用 RewriteRule 使 URL 看起来更好,但它不起作用。
就是这样。我有一个根文件夹,其中有一个名为 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
【问题讨论】:
附加一组您所追求的源和目标 URL。到目前为止你给出了什么规则? 我用 .htaccess 文件中的行更改了我的帖子。 【参考方案1】:在 root .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]
【讨论】:
我按照你说的做了,但是没用。我仍然收到 403 错误,因为 PDF 文件位于受保护的文件夹中,这意味着重定向不起作用。还有什么我可以尝试的吗? 保护线现在在第一个帖子中。当我删除它们时,您的 RewriteRule 似乎有效,但仅适用于文件名中只有一个单词的 PDF 文件。当名称有两个或多个单词并用空格分隔时,它不起作用。提前致谢! 很遗憾还是一样。 我尝试了一个类似example.com/pdf/File%20name.pdf的URL,其中文件名有两个单词。我得到的错误是 404,当变量中的文件不存在时 PHP 文件返回。 感谢您的回答!以上是关于用 .htaccess 重写不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 .htaccess 重写规则时 PHP 函数 file_exists 不起作用
.htaccess 与 EasyPHP:RewriteRule 不起作用
.htaccess url在将php更改为html时重写不起作用