繁体   English   中英

如何使用 .htaccess 将查询字符串重定向到基于 url 的子目录?

[英]How to redirect query string to subdirectory based url using .htaccess?

嗨,我尝试了很多示例,但对我没有任何帮助。

我需要重定向

来自: example.com/category.php?category_id=1&category=பொது

至: example.com/category/1/பொது/

我正在使用以下 htaccess

DirectoryIndex index.php

AddDefaultCharset utf-8

RewriteEngine On
RewriteCond %{QUERY_STRING} category_id=$1&category=$2
RewriteRule ^category\.php$ /$1/$2/? [L,R=301]

它重定向到这样的东西

example.com/category/%25E0%25AE%25AA%25E0%25AF%258A%25E0%25AE%25A4%25E0%25AF%2581

还显示找不到页面。 有人请帮助我。 谢谢。

这可能是您正在寻找的:

RewriteEngine On
RewriteCond %{QUERY_STRING} (?:^|&)category_id=([^&]+)&category=([^&]+)(?:&|$)
RewriteRule ^/?category\.php$ /category/$1/$2 [QSD,END,R=301]
RewriteRule ^/?category/([^/]+)/([^/]+)/? /category.php?category_id=$1&category=$2 [END]

最好先从 302 临时重定向开始,然后再将其更改为 301 永久重定向,前提是您确定一切都已正确设置。 这可以防止在尝试时出现缓存问题......

如果您使用上述规则收到内部服务器错误(http 状态 500),那么您很可能操作的是非常旧版本的 apache http 服务器。 在这种情况下,您将在 http 服务器错误日志文件中看到不支持的[END]标志的明确提示。 您可以尝试升级或使用旧的[L]标志,在这种情况下它可能会起作用,尽管这取决于您的设置。

此实现同样适用于 http 服务器主机配置或分布式配置文件(“.htaccess”文件)中。 显然重写模块需要在 http 服务器内部加载并在 http 主机中启用。 如果您使用分布式配置文件,您需要注意它的解释在主机配置中完全启用,并且它位于主机的DOCUMENT_ROOT文件夹中。

和一般性评论:您应该始终更喜欢将此类规则放在 http 服务器主机配置中,而不是使用分布式配置文件(“.htaccess”)。 这些分布式配置文件增加了复杂性,通常是意外行为的原因,难以调试,它们确实减慢了 http 服务器的速度。 它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM