我试图根据URI中的条件运行重写。总之,如果uri有一个字符串,并且不包含另一个字符串,请执行重定向。我现在有一个错误,但需要一些帮助才能让它发挥作用。
RewriteCond %{REQUEST_URI} (.*)usb-3-hard-drive(.*) [NC]
RewriteCond %{REQUEST_URI} !(*)start$
RewriteRule .* /en/manuals/usb-3-hard-drive/start [L]
请求网址:http://www.domain.tld/dir1/ usb-3-hard-drive / *
新网址:http://www.domain.tld/dir1/usb-3-hard-drive / start
当然,如果条件不符合,则后续的重写仍应受到尊重。
谢谢......答案 0 :(得分:3)
出现什么样的错误?您应该查看Apache的错误日志以获取详细的错误消息。
无论如何 - 我怀疑Apache抱怨糟糕的正则表达式语法。如果它不是复制粘贴的错字(不知何故),那么错误就在这里:!(*)start$
- 它本身没有*
这样的东西 - 你错过了点{{1在它之前 - 很可能你的意思是.
。
以下是更优化且完全正常工作的规则:
!(.*)start$
顺便说一句 - 它没有像你提到的那样“执行重定向” - 它只会在浏览器中URL保持不变时进行静默重写(内部重定向)。如果您想在浏览器地址栏中更改网址时进行正确的重定向(3xx代码),请在RewriteCond %{REQUEST_URI} /usb-3-hard-drive/ [NC]
RewriteCond %{REQUEST_URI} !/start$
RewriteRule .* /en/manuals/usb-3-hard-drive/start [L]
旁边添加,R=301
(或您喜欢的任何重定向代码),即[L]
。