php动态URL重写,表单提交为干净的URL

时间:2013-04-30 22:52:49

标签: php forms url redirect

我知道在网址重写过程中会出现很多错误,这就是为什么谷歌建议不要将网址转换为干净网址,如果你不完全了解你在做什么的话。

我想问一下这是否是正确的方法?

我的网站结构如下:

www.example.com/index.php?widget=blue&size=10&weight=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&size=20&weight = 100

我怎么能在这里进行重定向?我正在努力这样做:

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

新的redirect-url.php将包含以下代码:

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

?>

哪个应该导致我在上面发布的apache RewriteRule使其正常工作。

思考?这会有用吗?有更清洁的方式吗?

1 个答案:

答案 0 :(得分:1)

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