【问题标题】:htaccess mask dynamic url with a static urlhtaccess 使用静态 url 屏蔽动态 url
【发布时间】:2009-08-05 23:09:16
【问题描述】:

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

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

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

效果很好。

现在我正在尝试做但似乎无法弄清楚的是:

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

这可能吗?如果是怎么办?

谢谢

【问题讨论】:

  • 您想重定向到 mywebsite.com/product 吗?或者您只是希望能够使用 /products?id=12345?
  • 我不想重定向,我希望服务器将页面提供为“/products?id=12345”,但在浏览器的地址栏中将 url 显示为“/products”无论产品 ID 是什么。

标签: url .htaccess mod-rewrite mask


【解决方案1】:

这在干净的方式中是不可能的。要更改地址栏,您需要发送一个实际的 HTTP 重定向。这意味着您将收到来自浏览器的新请求,其中包含您将它们重定向到的任何内容,以此类推,您将不再拥有产品 ID。

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

  • 使您的服务器有状态
  • 将产品存储在 cookie 中

这两个都是坏主意。

你为什么要这样做?您想确保您的用户无法为您的产品添加书签吗?这似乎对用户非常不利。

【讨论】:

  • 其实我简化问题是为了问我的问题。产品页面使用动态过滤系统,仅显示当前库存的选项组合。结果页面类似于“products?color=red&category=456”。我不希望人们能够为特定搜索添加书签,以防选项组合不再库存,他们将获得一个空的结果页面。如果没有办法用 htaccess 做到这一点,我可能会更改过滤系统以使用 php 会话来隐藏客户的选择,而不是使用 URL 变量。
【解决方案2】:

我最终使用 ajax 和会话来使过滤过程对用户来说是无缝的。我想我试图用 htacess 文件做的事情是不可能的。还是谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多