htaccess mod_rewrite-尾随斜杠和重定向循环 [英] htaccess mod_rewrite - Trailing Slash and loop of redirects

查看:62
本文介绍了htaccess mod_rewrite-尾随斜杠和重定向循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的htaccess代码:

Here is my htaccess code:

RewriteEngine On
RewriteRule ^s/(.*)/(.*) /index.php?search=$1&category=$2 [L,QSA]

RewriteCond %{QUERY_STRING} ^search=([A-Za-z0-9\+]+)$
RewriteRule ^(.*)$ /s/%1/? [R=301,L]

RewriteCond %{QUERY_STRING} ^search=([A-Za-z0-9\+]+)&category=([A-Za-z0-9\+]+)$
RewriteRule ^(.*)$ /s/%1/%2/? [R=301,L]

我需要制定一个这样的重写规则:

I need to make a rewrite rule like this:

http://mywebsite.com/s/query+term => http://mywebsite.com/?search=query+term

OR if there is a category

http://mywebsite.com/s/query+term/Category => http://mywebsite.com/?search=query+term&category=Category

我还需要将所有旧网址重定向到新网址.

I need also to redirect all the old urls to the new one.

使用此规则,我所能获得的就是将搜索词和类别名称结合在一起.简而言之,好像我一直都这样:
http://mywebsite.com/?search=query+term/Category
如果删除所有条件(RewriteCond),则仅保留重写规则,并加上斜杠:

With this rules all that I can obtain is to have the search term and category name joined togheter. In a nutshell it is as if I had always:
http://mywebsite.com/?search=query+term/Category
If I remove all the conditions (RewriteCond), leaving only the rewrite rule with the addition of a trailing slash:

RewriteEngine On
RewriteRule ^s/(.*)/(.*)/ /index.php?search=$1&category=$2 [L,QSA]

直接达到我感兴趣的网址,整个过程就可以了.但是我没有重定向.

Reaching the url of my interest in a direct way, the whole thing works. But I will not have the redirect..

所以我试图设置这样的规则:

So I have tried to set a rule like this:

RewriteEngine On
RewriteRule ^s/(.*)/(.*)/ /index.php?search=$1&category=$2 [L,QSA]

RewriteCond %{QUERY_STRING} ^search=([A-Za-z0-9\+]+)$
RewriteRule ^(.*)$ /s/%1/? [R=301,L]

RewriteCond %{QUERY_STRING} ^search=([A-Za-z0-9\+]+)&category=([A-Za-z0-9\+]+)$
RewriteRule ^(.*)$ /s/%1/%2/? [R=301,L]

但是使用此规则,我只会得到一个重定向循环.

But with this rule I get just a loop of redirects.

推荐答案

您可以使用以下规则:

RewriteEngine on

#1--Redirect from "?search=foobar&cat=cat" to "/s/foobar/cat" --#
RewriteCond %{THE_REQUEST} /\?search=([^&]+)&cat=([^\s]+) [NC]
RewriteRule ^ /s/%1/%/%2? [NC,L,R]
#2--Redirect from "/?search=foobar" to "/s/foobar" --#
RewriteCond %{THE_REQUEST} /\?search=([^/\s]+) [NC]
RewriteRule ^ /s/%1? [NC,L,R]
#1--Rewrite "s/foobar/cat" to "/?search=foobar&cat=cat"--#
RewriteRule ^s/([^/]+)/([^/]+)/?$ /?search=$1&$category=$2 [NC,L]
#2--Rewrite "s/foobar" to "/?search=foobar"--#
RewriteRule ^s/([^/]+)/?$ /?search=$1 [NC,L]

这篇关于htaccess mod_rewrite-尾随斜杠和重定向循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆