Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
htaccess使用静态url屏蔽动态url_Url_.htaccess_Mod Rewrite_Mask - Fatal编程技术网

htaccess使用静态url屏蔽动态url

htaccess使用静态url屏蔽动态url,url,.htaccess,mod-rewrite,mask,Url,.htaccess,Mod Rewrite,Mask,我正在尝试使用.htaccess做一些我不确定是否可以完成的事情 我做的第一件事是使用以下代码隐藏.php扩展: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php 效果很好 现在我想做的是,但似乎无法理解的是: 当用户在浏览器地址栏中键入mywebsite.com/products?id=12345时,我希望

我正在尝试使用.htaccess做一些我不确定是否可以完成的事情

我做的第一件事是使用以下代码隐藏.php扩展:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
效果很好

现在我想做的是,但似乎无法理解的是:

当用户在浏览器地址栏中键入mywebsite.com/products?id=12345时,我希望服务器根据id提供正确的产品页面,但无论产品id是什么,都会在地址栏中将其显示为mywebsite.com/product

这可能吗?如果是,怎么做


谢谢

这真的不可能做到。要更改地址栏,您需要发送一个实际的HTTP重定向。这意味着您将从浏览器获得一个新请求,其中包含您重定向到的内容,因此在第二个请求中,您将不再具有产品ID

有两种方法可以解决此问题:

使您的服务器有状态 将产品储存在饼干中 这两个都是坏主意


你为什么要这么做?您想确保您的用户不能为您的产品添加书签吗?这似乎对用户很不友好。

我最终使用ajax和会话使过滤过程与用户无缝连接。我想我想用htacess文件做的是不可能的。无论如何谢谢你

是否要重定向到mywebsite.com/product?或者你只是想使用/products?id=12345?我不想重定向,我希望服务器以/products?id=12345的形式提供页面服务,但在浏览器的地址栏中以/products的形式显示url,而不管产品id如何。实际上,我简化了这个问题,目的是为了问我的问题。产品页面使用动态过滤系统,仅显示当前库存中的期权组合。结果页面看起来像products?color=red&category=456。我不希望人们能够将特定的搜索添加到书签中,以防期权组合不再有库存,他们会得到一个空的结果页面。如果htaccess无法做到这一点,我可能会将过滤系统更改为使用php会话来隐藏客户选择,而不是使用URL变量。