我想替换:
https://www.domain.com/?catid=0&id=6330
人:
https://www.domain.com/artigos/6330
使用.htaccess
这就是我正在尝试的:
RewriteRule ^?catid=0&id=(.*)$ /artigos/$1 [R=301,L]
但是给了我一个500 internal server error
。
我该如何解决这个问题?
答案 0 :(得分:1)
匹配什么?
在VirtualHost上下文中,最初将匹配模式 主机名和端口之后以及查询之前的URL部分 字符串(例如“/app1/index.html”)。
在Directory和htaccess上下文中,Pattern最初会是 删除前缀后,与文件系统路径匹配 将服务器引导到当前的RewriteRule(例如“app1 / index.html”或 “index.html”取决于定义指令的位置。
如果您希望与主机名,端口或查询字符串匹配,请使用 带有%{HTTP_HOST},%{SERVER_PORT}或。的RewriteCond %{QUERY_STRING}个变量。
您要匹配的内容是查询字符串的一部分!
答案 1 :(得分:1)
您无法在RewriteRule指令中与查询字符串进行匹配。要匹配查询字符串,您需要使用RewriteCond。
RewriteCond %{THE_REQUEST} /\?catid=0&id=([0-9]+) [NC]
RewriteRule ^ /artigost/%1? [NC,L,R]
重写目标末尾的空问号非常重要,因为它会丢弃旧的查询字符串。