Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
RewriteRule files/name/(.*).(pdf)$/ download.php?file=$1.$2&tkn=token
RewriteRule files/name/(.*).(pdf)$ download.php?file=$1.$2&tkn=token
RewriteRule files/name2/(.*).(pdf)$/ download2.php?file=$1.$2&tkn=token
RewriteRule files/name2/(.*).(pdf)$ download2.php?file=$1.$2&tkn=token
文件夹名称和名称2包含相同的文件。 download.php和download2.php完全相同。
files / name /(.*)重写规则会将几乎所有文件重定向到download.php,但是失败了,似乎是长文件名。我知道它失败的两个文件是:
ABCDEFGHIJKLMN-abcdefghij.pdf
Pbcdefg ab abc Abdefghij 2.PDF
files / name2 /(.*)规则捕获所有文件,包括第一个规则中失败的两个文件。从字面上看,如果我转到http://www.domain.com/files/names/abcdefghijklmn-abcdefghij.pdf,服务器将直接为我提供文件。如果我转到http://www.domain.com/files/names2/abcdefghijklmn-abcdefghij.pdf,(只需在名称中添加2),服务器会将我重定向到http://www.domain.com/download2.php?file=abcdefghijklmn-abcdefghij.pdf&tkn=token
我一直试图让它工作几个小时,我不知道为什么第一条规则不起作用。我有什么奇怪的特质吗?
答案 0 :(得分:0)
以这种方式试试看看它是如何运作的。
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
RewriteRule files/name2/(.*)\.pdf$ /download2.php?file=$1.pdf&tkn=token [R,L]
RewriteRule files/name/(.*)\.pdf$ /download.php?file=$1.pdf&tkn=token [R,L]