我正在向当前网址提交正常的<form method="get">
元素...这是搜索页面的一部分。结果网址如下。
http://domain.com/module/controller/action/get1/value1/?get2=get2&value3=value3
问题是我正在使用<?= $this->url(array('page' => x)); ?>
并且类似于导航但我想保留$_GET
参数...每当我使用它时,它会保留/
大幅削减$_GET
参数并丢失?&=
值对...
我想使用Mod_Rewrite将值对更改为斜线...
我目前的规则是......
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ zend.php [NC,L]
我对Mod_Rewrite没有信心,我不想与现有规则发生冲突。
我也喜欢尾随斜线......所以这将是一个奖励......
请帮忙!!非常感谢......
... PS
在标题中重新“Zend_Router
... Zend_Form
..”我正在使用Zend_Form
构建表单,我意识到我可以在onSubmit
函数上使用javascript来编写URL ...同样我可以使用Zend_Router来重写URL ...我认为Mod_rewrite
是最好的......
答案 0 :(得分:0)
我不知道如何使用正则表达式和mod_rewrite来实现它,但你可以像这样扩展Zend_Controller_Router_Route并使用它代替标准路由器:
<?php
class ZendY_Controller_Router_Route_GetAware extends
Zend_Controller_Router_Route
{
public static function getInstance(Zend_Config $config)
{
$reqs = ($config->reqs instanceof Zend_Config)
? $config->reqs->toArray() : array();
$defs = ($config->defaults instanceof Zend_Config)
? $config->defaults->toArray() : array();
return new self($config->route, $defs, $reqs);
}
public function match($path)
{
foreach ($_GET as $k => $v) {
if (is_array($v)) {
$v = implode(',', $v);
}
$path .= "{$this->_urlDelimiter}{$k}{$this->_urlDelimiter}{$v}";
}
parent::match($path);
}
}
答案 1 :(得分:0)
我找不到一个很好的方法来做到这一点...所以我决定在zend.php
的顶部编写一些最小化的PHP代码。
list($sURL, $sQuery) = explode('?', $_SERVER['REQUEST_URI']);
$sOriginalURL = $sURL;
if ('/' !== substr($sURL, -1)) $sURL .= '/';
if (isset($sQuery)) {
foreach (explode('&', $sQuery) as $sPair) {
if (empty($sPair)) continue;
list($sKey, $sValue) = explode('=', $sPair);
$sURL .= $sKey . '/' . $sValue . '/';
}
}
if (isset($sQuery) || $sOriginalURL !== $sURL) header(sprintf('Location: %s', $sURL));
如果有人可以改进,请在下面发表评论。