尝试使用 htaccess 从以下形式的传入 URL 文件请求重定向 Googlebot:
v_3099_0726dd5b5e8dd67a214c0c243436d131_all.css
到这种形式的文件,其中 5028
处的四位数字未知,但始终是四位数字。
v_5028_0726dd5b5e8dd67a214c0c243436d131_all.css
我认为这对于正则表达式是不可能的,因为这四个字符的 catchcall 正则表达式不能在目标路径中使用。换句话说,Rewrite 不能被告知“在目录____中查找与除这四个字符之外的所有内容字面匹配的文件名,并将它们与正则表达式包进行匹配。”
在 RewriteCond 中,与正则表达式的模式匹配仅在 CondPattern 的右侧可用,而不是在左侧(测试字符串),在左侧(测试字符串),人们可能会错误地希望使用正则表达式来匹配文件名带有 -f 标志的服务器,然后在 RewriteRule 中的反向引用中使用该正则表达式分组来实现目标。这个策略行不通。
在RewriteRule中,与正则表达式的模式匹配仅在左侧传入URL的模式中可用,因此不能在右侧使用来表示“在目录____中查找”除了这四个未知数字之外其他相同的文件,并重定向到该文件。”这个策略也行不通。
对于如何实现顶部所述的目标有什么想法吗?谢谢。
最佳答案
我想不出一种方法可以单独在 .htaccess
中做到这一点。您想要重定向/重写的文件必须是“已知的”。我无法(在 .htaccess
中)扫描特定目录以查找与特定模式匹配的文件并返回该文件(无需外部脚本的帮助)。
(旁白: MultiViews 允许提供具有本质上未知扩展名的文件 - 但这里的情况并非如此。)
您可以在重定向/重写到其中一个文件之前“测试”各种文件是否存在,但使用看起来像“随机”的 4 位数字 - 这将是极其低效的。
但是,您可以做的是在内部将对此类文件(不存在)的请求重写为服务器端脚本(例如 PHP)。然后,此脚本检查“当前”文件并重定向或返回此文件将是微不足道的(假设只有 1 个文件应与此模式匹配)。
其中的 .htaccess
部分类似于:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^v_\d{4}_[0-9a-f]{32}_all\.css$ return-current-file.php [L]
关于regex - 重定向到文件名部分已知/部分未知的 CSS/JS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56379699/