【问题标题】:Accuracy of htaccess testing toolshtaccess 测试工具的准确性
【发布时间】:2021-10-22 02:07:36
【问题描述】:

我试图提高对 htaccess 重写规则的理解,并使用了几个在线测试工具来验证我所做的简单重写,但我不明白为什么返回的 url 重复。我在质疑我的规则是否错误,这个工具是否存在固有问题?

我要做的就是将所有对 .com 域的请求重定向到 .com.au 域上的同一页面。

RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteRule .? "https://domain.com.au%{REQUEST_URI}" [L,R=301]

据我了解,这是说:

  • 条件:如果主机是domain.comwww.domain.com
  • 规则:匹配任何或不匹配请求的uri并重定向到https://domain.com.au/whatever-the-request-uri-is

但是当我使用 https://htaccess.madewithlove.be 进行测试时,返回的 url 会像 https://domain.com.au/bloghttps://domain.com.au/bloghttps://domain.com.au/blog... 一样重复 但是在网络服务器上它似乎工作正常。

我尝试的另一条规则是:

RewriteRule ^(.*)$ https://domain.com.au/$1 [R=301,L]

这会使用测试工具返回一个正确的结果,但我读到最好使用服务器变量。

那么我的第一条规则有问题还是那个测试工具坏了?

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    这根据我的测试有效:

    RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
    RewriteRule ^ https://example.com.au%{REQUEST_URI} [L,R=301]
    

    不过,我目前无法解释为什么您自己的尝试没有。对不起!我的印象是这确实是测试实用程序中的一个错误,假设您使用了https://htaccess.madewithlove.be/ ...

    【讨论】:

    • 谢谢 - 我更喜欢你的实现,它更干净。所以只提供^ 只是说:匹配开始?我想我弄清楚了在使用.? 时重复输出实际发生了什么 - 它正在替换 request_uri 中每个字符的 url,因此 /blog 被替换了 5 次.. 不确定这是否是实际 apache 服务器上的工作方式。 ..?
    • 您的匹配模式.? 在某种程度上是该测试实用程序的问题。如果您使用.+ 替换它,事情会出人意料地工作,因为这两个运算符都是贪婪的,?+ 同样如此。但这并不能回答你的问题。不,您的模式.? 不会替换任何东西,它仅用于匹配,无论它最终会匹配什么。替换只在下一个参数目标中完成,与匹配模式无关。似乎%{REQUEST_URI} 在测试实用程序中被修改了,为什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2011-07-18
    • 2021-11-12
    • 2011-04-28
    • 1970-01-01
    • 2010-10-03
    • 2020-07-18
    相关资源
    最近更新 更多