从URL查询中删除问号

时间:2017-01-15 15:52:19

标签: .htaccess mod-rewrite prestashop prestashop-1.6

有没有办法可以使用Mod_Rewrite从URL中删除问号?:

domain.com/controller-name?parameter/parameter/parameter

将控制器名称后的问号更改为斜杠

domain.com/controller-name/parameter/parameter/parameter

我想在PrestaShop中将此添加到htaccess,我将这样的查询发送到:controller / parameter / parameter to controller。

正常的Presta网址是domain.com/index.php?controller=controller-name,我设置了SEO设置友好的URL到这个控制器只重写为控制器名称所以SEO友好的URL是domain.com/controller-name。

要将一些参数发送到此控制器,我可以使用以下URL:domain.com/controller-name?(here parameters)

在我的控制器中,我在问号后抓取参数?并根据此参数显示内容。参数由斜杠分隔。所以我想摆脱问号并用斜线替换它来得到:domain.com/controller-name/(here parameters)带参数我希望看起来像domain.com/controller-name/parameter/parameter/

当我使用网址domain.com/controller-name/parameter/parameter/时显示错误404,而Presta看不到我想要来自controller-name的内容。

我认为可以通过.htaccess中的mod_rewrite规则来实现,但我不知道如何根据这个问题编写规则。

或者也许有一种方法可以在Presta中为控制器或SEO配置添加一些东西来代替?在查询中...这将是一个很好的解决方案...

1 个答案:

答案 0 :(得分:0)

您可以使用history.pushState和history.popState更改浏览器中不会导致页面重新加载的URL。但问题是旧版浏览器不支持此功能。

或者,您可以将window.location.hash属性设置为包含所需状态信息的值,然后使用window.onhashchange事件,或者不支持onhashchange的旧浏览器(IE< ; 8,Firefox< 3.6),定期检查哈希是否已更改(例如使用setInterval)并更新页面。您还需要检查页面加载时的哈希值以设置初始内容。

如果您正在使用jQuery,那么哈希变换插件将使用浏览器支持的任何方法。我确定其他库也有插件。

要注意的一件事是与页面上的ID冲突,因为浏览器将滚动到任何具有匹配ID的元素。