如何在 mod_rewrite 中设置可选参数

2024-02-28

我在一个新项目中,正在设计 URL 结构, 问题是我希望 URL 看起来像这样:/category-23/keyword/5/正常页面是:/search.php?q=keyword&cat=23&page=5所以我的问题是,cat and page字段,必须是可选的,我的意思是如果我去/keyword它应该是/search.php?q=keyword(第 1 页) 如果我去/category/keyword应该:/search.php?q=keyword&cat=category&p=1如果我去/keyword/5/一定是:/search.php?q=keyword&p=5

现在我的 .htaccess 是这样的:

RewriteEngine On
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*)$ search.php?q=$2&cat=$1&page=$3 [L]

我无法使其正常工作,并且 CSS/图像文件无法加载。 我非常感谢谁能给我一个解决方案。


您可以使用四个规则来完成此操作,每种规则一个:

RewriteRule ^([^/]+)$ search.php?q=$1
RewriteRule ^([^/]+)/([0-9]+)$ search.php?q=$2&p=$1
RewriteRule ^([^/]+)/([^/]+)$ search.php?q=$2&cat=$1&p=1
RewriteRule ^([^/]+)/([^/]+)/([0-9]+)$ search.php?q=$2&cat=$1&p=$3

将此规则置于其他规则之前,任何可以映射到现有文件的请求都将被传递:

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^ - [L]

现在,您的最后一个问题是找不到外部链接的资源,这是因为您可能正在使用相对 URL 路径,例如css/style.css or ./css/style.css。这些相对引用是从基本 URL 路径解析的,该路径是使用引用的文档的 URL 路径。因此,如果/category/keyword要求提供相对参考,例如css/style.css决心/category/keyword/css/style.css并不是/css/style.css。使用绝对 URL 路径/css/style.css使其独立于实际的基本 URL 路径

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

如何在 mod_rewrite 中设置可选参数 的相关文章

  • htaccess 重定向非 www http 和 https

    我想要 http example com重定向至 http www example com https example com重定向至 https www example com 以及任何东西http whatever example co
  • 多个域到单个网站

    我有多个域指向同一个网站 FFFF com FFFF ca FFFF org 等 重写 FFFF com 所有传入流量的最佳方法是什么 URL 重写还是 301 寻找最佳实践 这两个将在 htaccess 中处理 对吧 Thanks 在这种
  • 第301章

    Problem 访客打开网址website com i 133r534 213213 12312312但此网址不再有效 需要将其转发到website com 视频 133r534 213213 12312312 我尝试过的 在过去的几个小时
  • 使用 RewriteRule 从重定向中删除主题标签

    我目前正在通过获取变量并将其插入新 URL 来重定向 URL 就像这样 RewriteCond QUERY STRING pid 0 9 RewriteRule vault displayimage php photos 1 R 301 L
  • Windows 服务器上的 .htaccess 文件

    我进行了研究 发现我的 htaccess 文件无法在我的新 Windows 服务器上运行 我发现我应该使用 web config 我尝试了一下 但没有任何效果 然后我发现我可以使用 htaccess 文件 但我必须将其命名为其他名称 例如
  • WordPress .htaccess www。不强迫

    我正在尝试强迫www 在我网站的所有页面上 我将 WordPress 安装在我的主站点 blog 上的一个文件夹中 在 blog 文件夹中有一个 htaccess 文件 其中包含以下内容
  • WordPress Symfony 共存

    我们有一个在 Symfony 上运行的网站 它是由比我更有能力的人开发的 不过 我对 WordPress 非常熟悉 并将在该网站上安装一个博客 目前 该网站的根运行在 Symfony 上 但我希望 WordPress 能够接管 而不必触及
  • 在 htaccess 文件中使用 RewriteMap

    如何在 htaccess 文件中使用 RewriteMap 指令 当我把它放在那里时 我收到 此处不允许 RewriteMap 错误 我知道当将其放入 httpd conf 或虚拟主机配置文件中时 此错误将会消失 但我想知道是否可以将其放入
  • 多语言网站的 .htaccess 规则

    我正在重新设计 PHP 多语言网站 en es de fr ru 的 URL 该网站的 URL 是这样的 www mysite com page www mysite com page subpage1 www mysite com pag
  • 将旧锚链接重定向到新锚链接

    我正在彻底修改其他人为我的组织构建的网站 它最初设置为 不太好 的锚链接 其中包含空格 我已经用效果更好的新锚替换了这些锚 例子 其中一位老主播看起来像这样 course To Have哪些浏览器会幸运地转换为 course To 20Ha
  • 设置 Silex Bootstrap 时出现 Apache 错误:无法检查 htaccess 文件

    我正在尝试使用 Silex Bootstrap 建立一个网站 我已将它与其他 Web 项目一起放在我的文件夹中 并更改了 Apache 配置中的 DocumentRoot
  • 将 .php URL 重定向到不带扩展名的 URL [重复]

    这个问题在这里已经有答案了 可能的重复 使用 htaccess 删除 php 扩展名 https stackoverflow com questions 4026021 remove php extension with htaccess
  • PHP和.htaccess认证解决方案

    这是布局 web root admin dir index php js img other files dirs dir files 到目前为止 我使用 htaccess passwd 保护管理目录 因为我希望对该目录中的所有文件 包括
  • Apache mod_rewrite 将双斜杠转换为单斜杠

    我有一个像这样的网址 http example com img php url http example2 com path to image name jpg 所以我通过这个问题创建了一条规则Apache mod rewrite 复杂 U
  • 管理面板的 htaccess 重写规则

    我的网络应用程序中有这样的 url 模式 www mysitename com foldername controller method 所有请求的页面首先被重定向到根文件夹上的index php 然后处理请求的页面 但每当我进入管理面板
  • 控制缓存过期

    通过 Google 网站管理员工具的 PageSpeed 分析器运行我的网页后 它向我报告我的资源没有被缓存 下面是我的 htaccess 文件中直接取自 H5BP 的代码 我是否正确地假设以下过期时间设置正确 但我的实现中出现了问题 或者
  • 从子目录文件夹中删除尾部斜杠 Apache 1.3.42 DirectorySlash Off .htaccess

    我正在尝试从 Apache 1 3 42 中的子目录文件夹中删除尾部斜杠 但是命令DirectorySlash Off当我尝试将规则添加到我的 Apache 版本时 不支持 htaccess file 目前我的链接行为如下 www exam
  • .htaccess 强制“www”。除子域外的所有内容并删除尾随斜杠

    这是我到目前为止所拥有的 Force www RewriteCond HTTPS on RewriteCond HTTP HOST www NC RewriteRule http www HTTP HOST REQUEST URI R 30
  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

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

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

随机推荐