我正在尝试将我的 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]+