使用 mod_rewrite 重写用户代理规则
Posted
技术标签:
【中文标题】使用 mod_rewrite 重写用户代理规则【英文标题】:Rewrite rule for user agent with mod_rewrite 【发布时间】:2011-06-05 09:42:07 【问题描述】:我正在尝试将所有请求从特定用户代理重定向到域的子域。我的规则如下:
RewriteEngine on
RewriteCond %HTTP_USER_AGENT ^Test Agent/(.*)$ // <-- Line 4
RewriteRule ^(.*)$ https://test.domain.com/$1 [L,302]
但我在启动网络服务器时得到的只是:
Syntax error on line 4 of /var/www/misafe/internal/misafe-old.conf:
RewriteCond: bad flag delimiters
对我来说看起来不错,但我显然遗漏了一些东西,而且这个错误没有多大帮助。有什么想法吗?
谢谢, J
【问题讨论】:
【参考方案1】:有 2 个错误:
第一:
RewriteCond %HTTP_USER_AGENT ^Test Agent/(.*)$
您需要在正则表达式模式中转义空格和正斜杠。
RewriteCond %HTTP_USER_AGENT ^Test\ Agent\/(.*)$
第二:
RewriteRule ^(.*)$ https://test.domain.com/$1 [L,302]
302 是一个重定向 HTTP 状态代码,但您没有指定您正在重定向。
RewriteRule ^(.*)$ https://test.domain.com/$1 [L,R=302]
【讨论】:
完美,就是这样!无论我尝试多少,我似乎永远无法正确使用正则表达式,这对我来说似乎很陌生。无论如何,规则现在运行良好。谢谢。 要明确,问题不是任何正则表达式转义,而是配置文件语法转义。表达式中的空格完全可以不用转义,但如果有(或可能有)空格,则应在配置文件中使用引号。【参考方案2】:线路:RewriteRule ^(.*)$ @987654321@$1 [L,302]
应该是:RewriteRule ^(.*)$ @987654322@$1 [R=302]
【讨论】:
感谢您的回复,这绝对是问题的一部分,我没有正确逃脱正则表达式的事实是另一个问题。以上是关于使用 mod_rewrite 重写用户代理规则的主要内容,如果未能解决你的问题,请参考以下文章
Apache 2.4 不使用适用于 2.2 的规则通过 mod_rewrite 进行代理