允许带有重写规则.htaccess的$ _POST变量

时间:2012-04-27 06:29:30

标签: php .htaccess url-rewriting rewrite smarty

我很喜欢使用带有PHP和Smarty的MVC以及semantic URLS(URL重写)来创建页面。

所以我有一个主控制器,它读取控制器的名称及其动作。

示例:/ mypage / object / edit

重写后的主控制器读取:?subtopic = object& action = edit

其中“edit”是“object”类的函数。

所以,我在.tpl(Smarty模板)中有一个表格,如下所示:

<form name="formulario" action="/mypage/imagen_del_dia/guardar" method="POST">
<table>
<tr>
<td><div>Autor</div></td>
<td><input type='text' id='autor' value="{$username}" readonly /></td>
</tr>
<tr>
<td><div><input type='hidden' id='id' value="{$imagen.id}"/></td>
<td><input class="button_personalizado" type='submit' value='Editar' name='Editado'></td>
</tr>
</table>
</form> 

当您点击提交时,.htaccess执行此操作:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule    ^([0-9a-z_-]+)$ /mypage/index.php?subtopic=$1 [NC,L]
RewriteRule    ^([0-9a-z_-]+)/guardar$ /mypage/index.php?subtopic=$1&action=save [NC,L]

这个想法是$ _POST数据可以通过以下方式读取:

/mypage/index.php?subtopic=$1&action=save

在这种情况下,主控制器打开“imagen_del_dia”类,其功能“保存”

问题是$ _POST数据在这一点上丢失了。

1 个答案:

答案 0 :(得分:0)

@Zerkms非常感谢你,你是对的!

问题在于表单是正确的,因为我使用该表单作为AJAX函数,因此输入具有“id”标记,而在HTML中必须是“name”标记。

所以我将所有“id”重命名为“name”,现在工作正常!

示例:

<td><div><input type='hidden' name='id' value="{$imagen.id}"/></td>

另一个提示是我没有把 print_r($ _ POST); 放在正确的位置,因为我的页面是一个类,你需要把它放在类的最后PHP页面中的?&gt; 标记。

谢谢!