2013-04-30 60 views
1

我知道在URL重写过程中会出现很多错误,这就是为什么谷歌建议不要将URL转换为干净的URL,如果你不完全明白你在做什么。用动态URL重写表单提交到干净的URL

我想问一下,如果这是正确的方式去做这件事?

我有一个结构,像这样一个网站:

www.example.com/index.php?widget=blue &大小= 10 &重量= 50

我使用mod_rewrite的做这么干净的URL,可以使用这样的:

www.example.com/blue/10-inches/50-grams/

我用下面的代码来实现这一点:

RewriteEngine on 
RewriteRule ^([a-zA-Z-]+)/([0-9-]+)-inches/([0-9-]+)-grams/?$ index.php? widget=$1&size=$2&weight=$3 [NC,L] 

使这部分工作..但是有索引页面上的表单,以及根据下拉框选择和按下提交按钮更改index.php页面上的产品。

Dropdown 1 = blue, red, green 
Dropdown 2 = 10, 20, 30 
Dropdown 3 = 25, 50, 100 

默认这里会发生什么事是,当你选择说,红色,20,100,然后点击提交,你会得到旧的URL一样www.example.com/index.php?widget=red &大小= 20 &重量= 100

我怎么能在这里做重定向?我目前正在做这样说:

更改<form action="index.php" method="GET"><form action="redirect-url.php" method="GET">

这种新的重定向消息url.php将有以下代码:

<?php 
    header('Location: www.example.com/'.$_GET[widget].'/'.$_GET[size].'/'.$_GET[weight].'/'); 
    exit(); 

?> 

这应该引起Apache的重写规则我张贴上面,使其工作。

想法?这会工作吗?有更清洁的方法吗?

回答

0

通常,在提交表单时不会使用url_rewrite,因为没有构建url的默认方式。有两种方法。首先就像你说的那样,使用中间页面来获取表单值并将页眉重定向到url重写页面。其次是使用JavaScript构建重写url并转到那里。我会建议做两个。默认情况下,让表单提交到将执行重定向的页面。然后在表单上使用javascript并添加一个onsubmit事件,该事件将获取值并将表单的操作更改为重定向页面。这种方式没有不必要的重定向,如果javascript被启用,并且如果JavaScript被禁用,你仍然有重定向页面作为后备。