.htaccess重写规则杀死了我

时间:2019-08-09 23:40:28

标签: regex .htaccess mod-rewrite

我正在尝试为.htaccess编写重写规则。我认为我已经很接近了,但是我改变了一件事,然后又搞砸了其他事情。我对.htaccess或regex不太了解,可以使用一些帮助。

这是我需要的逻辑。

我从开始:

RewriteEngine on

我有一个带子文件夹的文件夹。 1)我需要文件夹和子文件夹为403,所以我做到了,它起作用了:

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^ - [R=403]

到目前为止很好。

2)在子文件夹中,有图像,同一图像的大小不同,但是还不存在。 我有一个image.original.png文件。

如果直接请求此文件,但该文件不存在,则需要显示404。所以我这样做了:

RewriteCond %{REQUEST_FILENAME} ^(.*)\.original\.png$

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^ - [R=404]

这似乎也很好。 这是我卡住的部分。

如果直接请求image.original.png文件并且它确实存在,我想显示另一个文件,即image.png。如果image.png不存在,它将被重定向到index.php,它将生成image.png,将其保存以供进一步使用并显示。

因此,重点是,用户永远不会看到image.original.png

然后是最后一部分。 image.png有几种变体,可能是image.280.png image.420.png image.660.png image.880.png,您明白了。

当请求这些变体中的任何一个时,如果它们存在,则应为它们服务。

如果不这样做,则应检查image.original.png,如果不存在,则应显示404。

如果存在image.original.png,则应转到index.php,将在其中生成image.requestedvariation.png,保存以备将来使用并提供服务。

这是我到目前为止所得到的...

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^ - [R=403]

RewriteCond %{REQUEST_FILENAME} ^(.*)\.original\.png$

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^ - [R=404]

RewriteCond %{REQUEST_FILENAME} ^(.*)\.original\.png$

RewriteRule ^(.*)\.original\.png$ ./$1.png

RewriteCond %{REQUEST_FILENAME} !^(.*)\.(.*)\.png$

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} ^(.*)\.(.+)\.png$

RewriteRule ^(.*)\.(.+)\.png$ ./$1.original.png

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php

在那混乱的某个时刻,我迷路了。

请帮助! :D 预先感谢!

1 个答案:

答案 0 :(得分:0)

看来我终于可以正常工作了! :D

下面是代码:(我在index.php中添加了一堆变量用于调试,但我想它们并不是必需的)

#!/usr/bin/env python3

from termcolor import colored
import time
from termcolor import cprint
import hashlib

max_digest = bytes(0)
max_num = 0

def main():
    global max_digest
    global max_num
    for num in range(100000):
        digest = hashlib.md5(int.to_bytes(num, 8, 'little')).digest() 
        if int.from_bytes(digest, 'little') > int.from_bytes(max_digest, 'little'):
            max_digest = digest
            max_num = num
        beautify_print_try(num)
        time.sleep(0.1)

def beautify_print_try(num):
    print("\033c")
    cprint('Best: ' + str(max_num) + ' (' + max_digest.hex() + ')', 'green', attrs=['bold'])
    cprint('[*] Try: ' + str(num), 'red', attrs=['bold'])

if __name__ == '__main__':
    main()