使用 mod_rewrite 实现具有多个变量的友好 URL 的最佳方法是什么?

2023-12-01

我正在构建一个 Web 应用程序,该应用程序的客户端 js 较多,数据从服务器分块推送。

我正在尝试为友好的 URL 解决方案实现一个解决方案,该解决方案采用如下 URL:

http://exmample.com/find/SomethingHere-or-there

这相当于一系列不可见的变量。所以它最终可能会这样处理:

我通过将友好 URL 作为参数传递然后返回完整 URL 来获取值。

我最初的实现使用 mod_rewrite 规则转发到提取友好 url 的脚本,查询数据库以获取匹配的友好 url 并返回完整的 url 及其映射到的所有参数,用此构建 url 字符串,然后转发到网络地址,然后将参数提取到 Web 应用程序前端。

但是,当我使用 php header("Location:http://example.com") 函数,以便他们看到带有参数的完整 URL。这是我试图满足的次要要求之一。

然后我想,由于我的网络应用程序的 js 很重,我是否应该尝试渲染页面,然后将参数从数据库中 ajax 发送到我的网络应用程序?这是最好的方法还是还有其他我不知道的技巧来实现这一目标?

没有启用 js 客户端不是问题。

附件是一些代码来概述我的初始实现:

//get the friendly url as a parameter
$goto = explode('=',$_SERVER['QUERY_STRING']);
//$goto[1] = SomethingHere-or-there

//build the friendly URL string
$forwardingURL = 'Location:http://'.$_SERVER['HTTP_HOST'].'/'.getForwardedURL($goto[1]);

//will be http://exmample.com/index.php?loc=London&type=2&priceCat=10-15
header($forwardingURL);

//function that returns the full url param string from the friendly url
function getForwardedURL($friendlyURL){     
$friendlyURL = mysql_escape_string($friendlyURL);
$query = "
SELECT url
FROM FriendlyURLmapping
WHERE friendly_url = \"$friendlyURL\"";

$resultP = mysql_query($query) 

//the full parametised URL will be in $row
$row = mysql_fetch_array($resultP, MYSQL_ASSOC);    
return $row["url"];
}   

通常的做法是将其中包含值的 URL 映射到参数化 URL。例如:

http://example.com/London/2/10-15
to

这可以在 .htaccess 中像这样完成:

RewriteEngine on
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ /index.php?loc=$1&type=$2&priceCat=$3 [L]

如果可能的话,我会避免重定向。如果您希望将完全不同的 URL 映射到参数,例如您的示例(/something-here to /index.php?...)那么您需要做的就是修改您的应用程序,以便将参数传递给显示页面的函数,或者设置变量并包含另一个执行处理的 PHP 文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 mod_rewrite 实现具有多个变量的友好 URL 的最佳方法是什么? 的相关文章

  • htaccess 301 重定向 htaccess 或 php

    我在 Htaccess 中有一个动态 URL 重写规则 如下所示 RewriteRule cartoon html fm cart new r id 1 location 2 L 此规则导致 URL 为http localhost fm c
  • Wicket 重定向:如何传递参数并保持 URL“漂亮”?

    考虑一个重定向到另一个页面的 Wicket 网页 基于此处省略的一些逻辑 public class SomePage extends WebPage public SomePage PageParameters parameters set
  • Apache 正在将文件夹重定向到同名的 .html 文件

    我正在尝试将 404 json fales 重定向到 404 json 以 作为内容 但 apache 正在将文件夹重定向到具有相同文件夹名称的 html 文件 并且任何自定义 404 json 重定向都会失败 文件结构 示例1 示例2 e
  • 重写问题 - L(ast) 不被尊重?

    所以我正在为一个网站开发 CSS JS 压缩系统 该系统基本上具有以下 htaccess RewriteEngine On RewriteRule css images images site 1 QUERY STRING L Rewrit
  • Mod_Rewrite 规则冲突让我发疯

    我有一个 htaccess 如下 有些规则是冲突的 我需要以某种方式制定一个条件 这样他们就不会 RewriteEngine On RewriteRule search results template php L RewriteRule
  • PHP .htaccess -> 漂亮的 url(相反)

    我知道如何进行 URL 重写 例如 www example com index php id 1 cat 3 to www example com 1 3 管他呢 我知道 我不知道到底如何更改所有页面中的整个链接以链接到漂亮的 URL 我网
  • 在 apache 配置中创建变量

    我有一个 apache 配置 如下所示 RewriteCond QUERY STRING site eu jp in NC RewriteRule fetchHomePage action https example com 1 R 301
  • Nginx 对 cms 后端的重写规则

    我需要在 nginx 服务器中制定 url 重写规则 服务器块 就像我之前的 apache 服务器一样 这是 htaccess 中的代码 我需要将其实现 转换 到我现有的代码中 RewriteRule A Za z0 9 A Za z0 9
  • URL 扩展隐藏:重写与重定向

    我已经阅读了很多问题和答案 但我无法决定哪一个更好或如何使用这些扩展隐藏方式的组合 我想要的是就是有一个像这样的url重写堆栈溢出 那么我还应该做什么才能遵守这些规则 url example com file anyEXT show con
  • 正则表达式匹配非整数?

    尝试创建一个忽略正确整数的正则表达式 1 5 999等 和正斜杠 但在其他所有内容中都找到匹配项 例如 它将找到以下匹配项 test test1 test 1 但忽略了 1 55 7 这是为了模组重写 0 9 我想应该可以解决这个问题 它将
  • 使用 RewriteRule 从重定向中删除主题标签

    我目前正在通过获取变量并将其插入新 URL 来重定向 URL 就像这样 RewriteCond QUERY STRING pid 0 9 RewriteRule vault displayimage php photos 1 R 301 L
  • Apache mod_rewrite 将双斜杠转换为单斜杠

    我有一个像这样的网址 http example com img php url http example2 com path to image name jpg 所以我通过这个问题创建了一条规则Apache mod rewrite 复杂 U
  • .htaccess 将所有页面重定向到新域上的主页

    我将使用哪个重定向规则来重定向下的所有页面olddomain example被重定向到newdomain example 该网站的结构完全不同 所以我想要每一页在旧域名下重定向到新域名索引页 我认为这可以 在 olddomain examp
  • 如何使用`RewriteRule ^(.*)$ ?id=$1 [L,QSA]`通过.htaccess获取文件目录?

    如何使用 htaccess 获取文件目录RewriteRule id 1 L QSA 如果 htaccess 位于http localhost some dir htaccess我正在打开http localhost some dir he
  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

    我试图阻止直接访问子文件夹中的特定文件 我意识到这个论坛上有很多描述类似问题的主题 但是 我的似乎有点尴尬 由于我已经存在 HTACCESS 文件 这是文件的文件路径 www example com PRINCIPAL PROJECTS m
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • Zend 如何使用 mod_rewrite 解析前端控制器中的 URL?

    我不明白 Zend Framework 如何控制路由 我实际上正在尝试创建自己的控制器 路由类 编写了与 Zend 建议的 htaccess 相同的代码 以重写位于网站根目录的index php RewriteEngine On Rewri
  • mod_rewrite, .htaccess 连接mysql数据库

    我希望 htaccess 文件中的 mod rewrite 链接到 mysql 数据库以向我提供映射信息 具体来说 我使用单个代码库来托管多个站点 因此 如果用户请求图像 例如 http www example com images car
  • 用.htaccess重写动态url结构

    我尝试将动态 URL 如下 重写为稍微不同的结构 要么不起作用 要么我不确定它是否正确 旧网址 URL 1 index php lang AAA zone BBB city CCC str DDD search EEE 新网址 URL 11
  • 如何阻止用户通过url访问css文件和图像

    我在用 htaccess防止用户通过 url 访问文件 线路 RewriteRule frontend assets css index L R 工作正常 它阻止用户访问 css 文件 然而 RewriteRule frontend ass

随机推荐