.htaccess重写似乎在较长的字符串上失败

时间:2014-02-25 02:48:56

标签: apache .htaccess mod-rewrite

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

我一直试图让它工作几个小时,我不知道为什么第一条规则不起作用。我有什么奇怪的特质吗?

1 个答案:

答案 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]