Mod rewrite mod_重写被忽略

Mod rewrite mod_重写被忽略,mod-rewrite,query-string,Mod Rewrite,Query String,我正在尝试将“domain.com/index.php?site=food&category=beef”转换为“domain.com/food/beef”,但不管我怎么做,它都不起作用。它总是离开原始域,我没有得到任何错误 我想这是我的错,我在3个不同的服务器(和3个不同的项目)上尝试了3个不同的URL。。。看起来我不明白mod_rewrite是如何工作的,尽管我阅读了所有关于这个主题的文档。我甚至在这里呆了几天也没有找到任何解决办法 已在服务器上启用Mod_rewrite: RewriteEn

我正在尝试将“domain.com/index.php?site=food&category=beef”转换为“domain.com/food/beef”,但不管我怎么做,它都不起作用。它总是离开原始域,我没有得到任何错误

我想这是我的错,我在3个不同的服务器(和3个不同的项目)上尝试了3个不同的URL。。。看起来我不明白mod_rewrite是如何工作的,尽管我阅读了所有关于这个主题的文档。我甚至在这里呆了几天也没有找到任何解决办法

已在服务器上启用Mod_rewrite:

RewriteEngine On
RewriteRule ^  http://www.google.com [R,L]
给我“http://www.google.com/?site=food&category=beef". 看起来mod_rewrite无法识别查询字符串。。。所以我用RewriteCond%{QUERY_STRING}尝试了几种解决方案。。。但什么都不管用:/

希望你们能帮助我!我快疯了

提前谢谢

试试看:

RewriteEngine on
RewriteRule ^food/beef$ index.php?site=food&category=beef [L]
或者更一般地说:

RewriteEngine on
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?site=$1&category=$2 [L]

你想做这样的事吗

RewriteRule ^([^/]+)/([^/]+)/? /index.php?site=$1&category=$2 [L]
当您转到请求时,它将在内部被重写为“/index.php?site=food&category=beef”,并且index.php用于服务原始请求。浏览器的位置栏仍会显示“http://domain.com/food/beef".

如果您希望位置栏显示,则在“[L]”中添加一个“R”。如果这是向后的,并且当有人进入位置栏时您希望这样做,并且请求在服务器内部被重写为“/food/beef”,那么您需要使用RewriteCond解析查询字符串:

RewriteCond %{QUERY_STRING} ^site=([^&]+)&category=([^&]+)
RewriteRule ^index.php /%1/%2? [L]
与第一个示例一样,“R”也会导致浏览器重定向。如果要将位置栏更改为,则括号应如下所示:
[L,R]
。请注意,在规则中的目标末尾需要一个,这样查询字符串就不会被抛出。这就是为什么在google示例中会附加查询字符串的原因

编辑:

鉴于您只是想更改浏览器位置栏中的内容,而不是内容所在的位置: 您需要将上面第二条规则重写的内容重新重写回index.php,但不需要重定向。为了防止这两条规则无限循环,因为一条规则重写为另一条规则,反之亦然,您需要在某个位置添加一个标志,以防止上面的第二条规则一次又一次地重定向您

因此,将两者结合起来,您将得到:

RewriteRule ^([^/]+)/([^/]+)/? /index.php?site=$1&category=$2&redirected [L]

RewriteCond %{QUERY_STRING} !redirected
RewriteCond %{QUERY_STRING} ^site=([^&]+)&category=([^&]+)
RewriteRule ^index.php /%1/%2? [L,R=301]
注意查询字符串中的
redirected
参数。当有人试图访问url的干净版本时,例如“/food/beef”,就会插入此选项。在内部,它被重新路由到index.php,但由于规则没有“R”,浏览器的位置栏不会改变


第二条规则现在检查查询字符串中是否包含
重定向的
参数。如果没有,则表示有人在浏览器的位置栏中输入index.php url,因此将浏览器重定向到干净版本。

谢谢您的回答!我尝试了[L]和[L,R],但浏览器栏仍然显示“domain.com/index.php?site=food&category=beef”,是的,我希望它显示“domain.com/food/beef”,第二个不会为您重定向?如果使用第二条规则,不要包括第一条规则,它们不兼容。您没有任何其他可能影响此操作的规则,是吗?没有,除了第二条规则.htaccess为空。没有重定向,只是什么也没发生:/n您是否启用了
重写引擎
?(我忽略了这一点,认为这是多余的)是的,我的.htaccess看起来是这样的:
RewriteCond%{QUERY_STRING}^site=([^&]+)&category=([^&]+)RewriteRule^index.php/%1/%2?[L,R]
您确定您在浏览器中请求了
domain.com/food/beef
而不是
domain.com/index.php?site=food&category=beef
?抱歉,我没有看到您的评论。是的,我想在我的浏览器中使用domain.com/food/beef而不是长URL