这个.htaccess我做错了什么?

时间:2016-01-08 13:22:41

标签: php apache .htaccess redirect

我有以下.htaccess文件:

RewriteEngine On
RewriteBase /
RewriteRule ^/(.*)/(.*)/(.*)$    index.php?pageLevel1=$1&pageLevel2=$2&pageLevel3=$3 [L,R=301]

当我使用http://www.domain.com/testpage/访问我的网站时,它会给我404 Not Found错误。我做错了什么?

PS:目前index.php文件只是回显了pageLevel1,pageLevel2和pageLevel3值。

2 个答案:

答案 0 :(得分:3)

从重写模式中删除前导斜杠

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)/(.*)/(.*)$ index.php?pageLevel1=$1&pageLevel2=$2&pageLevel3=$3 [L,R=301]

答案 1 :(得分:1)

首先,我不知道你为什么要使用301重定向?如果你想接受网址中的所有字符,你只需要有一个像这样的全能重写规则:

void OnMatchList(ListMatchResponse matchList)
{
  if (matchList.Count == 0)
         {
             CreateMatchRequest match = new CreateMatchRequest();
             match.name = "OrionPongRoom";
             match.size = 2;
             match.advertise = true;
             match.password = "";
             networkMatch.CreateMatch(match, OnMatchCreate);
         }
         else
             Debug.Log ("******matches found"+matchList.Count);
}

如果你想捕捉你定义的参数,重写规则可以是这样的:

RewriteRule ^(.*)$ index.php?param=$1 [L]

<强>更新

您的案例中已完成的规则​​(三个页面级别),其中URL slugs接受字母和数字可以是:

RewriteRule ^([A-Za-z-]+)/([A-Za-z-]+)/([A-Za-z-]+)$ index.php?pageLevel1=$1&pageLevel2=$2&pageLevel3=$3 [L]

这样您就可以访问以下页面:

RewriteRule ^([A-Za-z0-9-]+)$ index.php?pageLevel1=$1&pageLevel2=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ index.php?pageLevel1=$1&pageLevel2=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ index.php?pageLevel1=$1&pageLevel2=$2&pageLevel3=$3 [L]