棘手的301重定向规则

时间:2014-01-08 17:57:24

标签: apache .htaccess

我想要以一种方式重定向链接,使得末端没有斜杠的url应该被重定向到末尾带斜杠的url。

示例1:

http://example.com/quiz/funny-riddles-with-answers

应该重定向到

http://example.com/quiz/funny-riddles-with-answers/

示例2

http://example.com/quiz/math-riddles-with-answers

应重定向到

我不知道该怎么做。

我当前的.htacess截图是

RewriteEngine On
RewriteBase /quiz/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)?$ mypage.php?param1=$1&param2=$2 [L,QSA]

3 个答案:

答案 0 :(得分:1)

/quiz/.htaccess中尝试这些规则:

RewriteEngine On
RewriteBase /quiz/

# add a trailing slash for non-directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?[^/])[?\s]
RewriteRule ^ %1/ [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ mypage.php?param1=$1&param2=$2 [L,QSA]

答案 1 :(得分:0)

您可以使用以下方法轻松地重写为尾部斜杠:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

放在您现有的重写之上。

答案 2 :(得分:0)

您需要将当前规则的模式更改为:^([^/]+)/([^/]+)?/?$

然后在RewriteBase /quiz/

下添加此权限
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ /$1/$2/ [L,R=301]