我有一个名为
/pdf/
的结构,用于存储生成的 PDF。我正在尝试使用 .htaccess 将访问者路由到 PDF 文件夹。
我的 .htaccess 文件中有这条规则:
RewriteEngine On
RewriteBase /
RewriteRule (.*) index.php?page=$1.html
RewriteRule ??? for pdf??
(注意
???
标记...)
当我尝试访问 url
/manual_chap_1
时,它正在工作。但当我尝试/pdf/manual_chap_1
时,它似乎不起作用。这是我看到的一些输出:
$_GET[page] => index.php.html
我希望能够生成 PDF 文件,如果请求的位置不存在 PDF 文件,然后,我希望它加载 HTML 页面。
试试这个:
RewriteEngine On
RewriteBase /
RewriteRule ^pdf/([a-z0-9\-_\.]+)$ pdf.php?file=$1 [L,NC,QSA]
RewriteCond %{REQUEST_URI} !^/pdf
RewriteRule ^([a-z0-9\-_\.]+)/?$ index.php?page=$1.html [L,NC,QSA]
L: [L] 标志导致 mod_rewrite 停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理更多规则。这对应于 Perl 中的最后一个命令,或 C 中的中断命令。使用此标志来指示应立即应用当前规则,而不考虑进一步的规则。
QSA:当替换 URI 包含查询字符串时,RewriteRule 的默认行为是丢弃现有查询字符串,并将其替换为新生成的查询字符串。使用 [QSA] 标志会导致查询字符串被组合。
NC: 使用 [NC] 标志会导致 RewriteRule 以不区分大小写的方式进行匹配。也就是说,它不关心匹配的 URI 中字母是大写还是小写。
另外,我建议使用破折号而不是下划线。