我有一个这样的网址列表。
/wp-content/uploads/2023/01/Hambu-logo.png
/wp-content/uploads/2023/01/Anesa-logo.png
/wp-content/uploads/2023/01/Rock-logo.png
/wp-content/uploads/2023/01/Blue-logo.png
使用RewriteCond %{REQUEST_URI},当%{REQUEST_URI}以**/wp-content/uploads/开头并且不以以下两个字符串之一结尾时,我希望重写到另一个网站Hambu-logo.png或Anesa-logo.png**
我试过很多不同的表达方式,但都不管用。我在消极前瞻方面做错了什么?
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-content/uploads/.*(?!(Hambu-logo.png|Anesa-logo.png))$
RewriteRule ^wp-content/uploads(.*)$ https://www.test.com/wp-content/uploads$1 [R=302,L]
1条答案
按热度按时间bq8i3lrv1#
负前瞻之前的
.*
消耗字符串的其余部分,负前瞻 * Assert * 总是失败。您可以改为使用负向后看:
但是,这可以简化,不需要否定的 lookaround,只需在 condition 中使用求反表达式(mod_rewrite语法),不需要同时匹配
RewriteRule
pattern 和 condition 中的URL前缀。例如,在根
.htaccess
文件中:以上匹配以
/wp-content/uploads/
开头但不以/Hambu-logo.png
或/Anesa-logo.png
结尾的所有URL。CondPattern 上的!
前缀对表达式求反,因此在不匹配时成功。由于要重定向到目标上的同一URL路径,因此可以只使用
REQUEST_URI
服务器变量,而避免RewriteRule
pattern 中的捕获子模式。或者,在
/wp-content/uploads
子目录中创建另一个.htaccess
文件,可以进一步简化规则(不需要RewriteCond
指令):