Php完全兼容的sef链接 - htaccess

时间:2016-08-26 11:40:30

标签: php apache .htaccess redirect mod-rewrite

我想要完成的是让我的网址与各种额外的参数兼容。

它必须能够使用n个斜杠。所以我的htaccess在127.0.0.1/store/之后获取所有内容并将其作为id发送给redirect.php。

as in
http://127.0.0.1/store/category/cars/show/1/page/2
or
http://127.0.0.1/store/category/cars/color/red/price/min/100

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.domain\.com$

RewriteRule ^(.*)$ http://127.0.0.1/store$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ redirect.php?id=$1 [QSA,L]

在我的redirect.php中,我使用斜杠来获取脚本名称及其参数

if($_GET['id']){
   $param = explode('/', $_GET['id']);
   $template = $param[0];
   // header redirect -> go to category.php
}

这给了我

Array
(
    [0] => category
    [1] => electronics-computers
    [2] => show
    [3] => 1
    [4] => page
    [5] => 2
)

到目前为止一直很好,然后我尝试在这个例子中使用参数重定向到category.php文件,但由于htaccess控制流量,它变为无限重定向

我认为我应该为htaccess添加一些例外,以免干扰来自redirect.php的请求,但我无法使其正常工作

ps:如果有更好的方法,请告诉我

1 个答案:

答案 0 :(得分:0)

  

然后我尝试重定向到此示例中的category.php文件

嗯,那就是,你不应该重定向这个阶段。重定向涉及将重定向响应发送回客户端,然后客户端将第二个/新请求发送回服务器(这会导致重定向循环)。

  

如果有更好的方法,请告诉我

您需要路由请求。由于您知道所需文件为contact.php(在此示例中),因此请读取此文件服务器端,传递所有必需参数并将其在同一响应中发送回客户端。