将 nginx 规则转换为 .htacees

将 nginx 规则转换为 .htacees

我正在尝试将我的 nginx 块转换为 apache(.htaccess) 文件,但无法实现。你能帮我吗

location = /index.php {
  if ($arg_a = get) {
    return 301 /$arg_a/$arg_b;
  }
}

location = /home.php {
 return 301 /$arg_bool;
}

对于 action = get,旧网站网址如下所示:

/index.php?action=get&id=5000849

(上述代码重写为/get/5000849)

答案1

(上述代码重写为/get/5000849)

上面的 Nginx 代码是外部(301)重定向,严格来说不是“重写”。(尽管您很可能稍后也需要在文件中进行重写.htaccess。)

重定向 /index.php?action=get&id=5000849你可以/get/5000849在文件.htaccess顶部附近执行如下操作.htaccess

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^action=(get)&id=(\d+)
RewriteRule ^index\.php$ /%1/%2 [R=302,L]

get部分可以采用硬编码,而不是使用反向引用,因为这似乎是常量。尽管使用反向引用可以节省重复(这是我的偏好)。

检查REDIRECT_STATUS环境变量是为了避免重定向循环,因为我认为你已经有一个指令重写请求index.php稍后返回到您的配置文件。(?)

%1%2反向引用最后匹配的捕获组条件模式(前述RewriteCond指令)。

此重定向仅应用于重定向旧 URL 结构以维护 SEO。这不应成为您网站功能不可或缺的一部分。

注意:使用 302(临时)重定向进行测试以避免缓存问题。只有当您确定它正常工作时才更改为 301(永久)。您需要在测试前清除浏览器缓存。

更新: home.php?bool=contact将重定向至/contact

对于第二部分,同样的原则适用,只是只有一个 URL 参数,而不是两个。例如:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^bool=([a-z]+)
RewriteRule ^home\.php$ /%1 [R=302,L]

在您的示例中,这假设始终为 az(小写) - 如在您的示例中一样。根据需要<contact>调整正则表达式。[a-z]+

相关内容