【发布时间】:2019-12-17 16:15:25
【问题描述】:
我正在尝试为 .htaccess 编写重写规则。我想我已经很接近了,但是我改变了一件事,然后又搞砸了另一件事。我对 .htaccess 或正则表达式不是很精通,我可以使用一些帮助。
这是我需要的逻辑。
我开始:
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 提前致谢!
【问题讨论】:
-
你能简化一下这个问题吗?你是不是遇到了错误,
I just got lost没什么好说的。 -
我有时会收到一个错误,有时它会在不应该出现的情况下退回到 inedx.php。上面的代码没有错误,但它没有检查 item.original.png 是否存在以查看它是否显示变化。
标签: regex .htaccess mod-rewrite