##### PART 1
# IF:
RewriteRule ^ac$ /ac05182018.pdf [R=301,NC,L]
# THEN:
RewriteCond %{DOCUMENT_ROOT}/downloads/$1 -f
RewriteRule ^(.+\.(pdf))$ downloads/$1 [L]
##### PART 2
# IF:
RewriteRule ^ac64$ /ac64_05182018.pdf [R=301,NC,L]
# THEN:
RewriteRule ^(.*).(pdf)$ download.php?file=$1.$2 [L]
" 第1部分"独立工作(=如果请求 http ... mysite.com/ac 然后重写为" http ... mysite.com/downloads/ac05182018.pdf&#34)。
" 第2部分"也是独立的(=如果有人请求 http ... mysite.com/ac64 ,那么这会重写为" http ... mysite.com/download.php?file= ac64_05182018.pdf "。)
我想知道如何实现以下:
我需要将它们(第1部分和第2部分)合并,这样任何一个都将被执行,我的意思是两者都有效,具体取决于请求的文件( / ac 或 / ac64 )。
当我这样做时,"第1部分"不再改写为" /downloads/ac05182018.pdf"然后停止执行其余的操作。而是重写为" http ... mysite.com/download.php?file=downloads/ac05182018.pdf" ...
知道如何实现这个目标吗? 类似的东西:
# IF:
RewriteRule ^ac$ /ac05182018.pdf [R=301,NC,L]
# THEN:
RewriteCond %{DOCUMENT_ROOT}/downloads/$1 -f
RewriteRule ^(.+\.(pdf))$ downloads/$1 [L]
# ELSE
# IF:
RewriteRule ^ac64$ /ac64_05182018.pdf [R=301,NC,L]
# THEN:
RewriteRule ^(.*).(pdf)$ http...mysite.com/download.php?file=$1.$2 [L]
可能使用RewriteRule标志[S]或
<If ... >
...
</If>
<Else>
...
</Else>
在How to write "if...else" mod_rewrite statements in .htaccess的答案中看到了什么?
答案 0 :(得分:0)
首先,此行RewriteCond %{DOCUMENT_ROOT}/downloads/$1 -f
将阻止执行下一个规则RewriteRule ^(.+\.(?:jpe?g|pdf))$ downloads/$1 [L]
,因为您尚未在文档根目录中进行下载。
删除后,.pdf
个文件将有两个规则:
RewriteRule ^(.+\.(?:jpe?g|pdf))$ downloads/$1 [L]
和此:
RewriteRule ^(.*).(rar|zip|pdf)$ http...mysite.com/download.php?file=$1.$2 [R,L]
除非你做了某些条件,否则其中一个条件都匹配.pdf
,这会产生错误。
此外,不要忘记将L
标志放在这里:
RewriteRule ^ac64$ /ac64_05182018.pdf [R=301,NC]
应为RewriteRule ^ac64$ /ac64_05182018.pdf [R=301,NC,L]
L标志表示如果规则匹配,则不会处理其他规则。
如果我理解你,你的代码应该是这样的:
RewriteEngine On
#Part 1
RewriteRule ^ac$ /ac05182018.pdf [R=302,NC,L]
RewriteCond %{REQUEST_URI} !(downloads|ac64)
RewriteRule ^(.+)\.(jpe?g|pdf)$ /downloads%{REQUEST_URI} [L]
#part 2
RewriteRule ^ac64$ /ac64_05182018.pdf [R=302,NC,L]
RewriteCond %{REQUEST_URI} !downloads
RewriteRule ^(.+)\.(rar|zip|pdf)$ /download.php?file=$1.$2 [L]
清除浏览器缓存并对其进行测试,如果可以,请将302
更改为301
以获得永久重定向。
注意: .pdf
不以ac64
开头的任何ac
文件将由crosstab
规则第一规则处理。