mod使用get变量重写表单提交

wgeznvg7  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(298)

你好,善良的人们。。现在我知道这个关于clean url的问题已经被问了大概十几次了,但似乎没有一个是我遇到的问题。我使用while循环为我的表单生成不同的产品id,表单是使用get方法提交的。然而,我已经能够在htaccess文件中用字符串重写我的url

localhost/source/p/variable1-variable2-variable3.html

我还使用javascript来阻止默认提交,以获得所需的url格式。
现在我的问题是。。如果没有url重定向,它会给我不同的ID,但格式不干净:

localhost/source/p?  agent_id=variable1&product_title=variable2&product_id=variable3

在我的while循环中有不同的变量。。
但是通过javascript重定向,它只给我第一个id,并且在20多个不同的情况下一直显示具有该id的内容。所以我需要帮助如何提供不同的身份证,我通常应该得到。这是我的档案:
我的htaccess文件

Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteRule ^p/([0-9]+)-([0-9a-zA-Z_-]+)-([0-9]+)\.html$ product.php?agent_id=$1&product_title=$2&product_id=$3 [QSA, NC, L]

php操作文件

<?php 
$SQL = Select * from product where.. 
$query = mysqli_query($con, $sql);
While ($row = mysqli_fetch_assoc($query)) { 
$product_id = $row ['product_id'];
$agent_id = $row ['agent_id'];
$product_title = $row ['product_title'];
?>
<form id="myform" method='get' action='p/'>
<input type="hidden" name="agent_id" value="<?php echo  $agent_id; ?>" />
<input type="hidden" name="product_title" value="<?php echo $product_title; ?>" />
<input type ="hidden" name="product_id" value="<?php echo $product_id; ?>" />
<button type="submit">View product</button>
</form>
<?php } ?>

我的javascript

$(function(){
$("#myform").submit(function(e){
e.preventDefault();
var action = $(this).attr("action");
var agent_id = $(":input[name='agent_id']").val();
var product_title = $(":input[name='product_title']").val();
var product_id = $(":input[name='product_id']").val();
action = action + agent_id + "-" + product_title + "-" + product_id +    ".html"; 
location.href = action; 
});
});

所以我不知道我做错了什么。。我不知道如何通过循环来给出各种ID,因为我认为while循环会改变这一点。。但事实并非如此。
抱歉,如果我的手机有点乱的话。

z4iuyo4d

z4iuyo4d1#

首先,当您不确定.htaccess在mod\u rewrite方面做了什么时,您应该首先打开mod\u rewrite的日志记录级别,因为这通常会为您指明正确的方向:http://httpd.apache.org/docs/current/mod/mod_rewrite.html

LogLevel alert rewrite:trace3

接下来,我建议您提供一个正在匹配的url的有效示例,然后使用regex coach之类的工具来检查您的模式是否真正正确地匹配了数据。
我对这里实际问题的猜测是,产品标题没有得到预期的匹配(可能是意外的编码字符或其他东西),但是mod\u rewrite的日志将告诉您regex是否成功。
最后,我不知道为什么你要使用一个表单标签,如果你实际上不打算提交表单。。。
为什么不直接使用php来构建一个重定向到那个位置的按钮呢?

...
$product_title = $row ['product_id'];

echo "<input type='button' value='View product' onclick='location.href=\"/p/".urlencode($agent_id)."-".urlencode($product_title)."-".urlencode($product_id)."\";'>\n";
?>

这比试图阻止表单提交和使用javascript动态构建表单更干净。。。

相关问题