SEO 友好的 URL 而不是查询字符串 .htaccess

2023-12-14

如何修改 .htaccess 文件并获取 SEO 友好的 URL 而不是查询字符串。我想实现这 3 个目标:

  1. 本地主机/示例/产品/代替本地主机/示例/products-list.php
  2. 本地主机/示例/产品/38/代替本地主机/示例/products.php?id=38
  3. 本地主机/示例/产品/38/红色/代替localhost/example/products.php?id=38&color=red

在另一篇文章中,@anubhava 对我帮助很大,这就是我现在的第二点:

RewriteEngine on
RewriteBase /example
# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+) [NC]
RewriteRule ^ products/%1? [R=302,L,NE]
# internal forward from pretty URL to actual one
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^products/([^/]+)/?$ products.php?id=$1 [L,QSA]

第二点工作正常,但我想知道我必须将其他规则放在哪里,之前还是之后。我将其放在其他规则之后,但它不起作用,因为它重定向到前一个网址本地主机/示例/产品/38/:

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+)\?color=([^\s&]+) [NC]
RewriteRule ^ products/%1/%2? [R=302,L,NE]
# internal forward from pretty URL to actual one
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^products/([^/]+)/([^/]+)/?$ products.php?id=$1&color=$2 [L,QSA]

您需要 2 个参数的新规则集:

RewriteEngine on
RewriteBase /example/

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+)&color=([^\s&]+) [NC]
RewriteRule ^ products/%1/%2/? [R=302,L,NE]

RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+)\s [NC]
RewriteRule ^ products/%1/? [R=302,L,NE]

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# internal forward from pretty URL to actual one
RewriteRule ^products/([^/]+)/?$ products.php?id=$1 [NC,L,QSA]

RewriteRule ^products/([^/]+)/([^/]+)/?$ products.php?id=$1&color=$2 [NC,L,QSA]

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

SEO 友好的 URL 而不是查询字符串 .htaccess 的相关文章

  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph
  • 删除PHP字符串中所有不匹配的字符?

    我有一个文本 我想从中删除所有不属于以下字符的字符 所需字符 0123456789 abcdefghijklmnopqrstuvwxyz n 最后一个是我确实想保留的 n 换行符 要匹配除列出的字符之外的所有字符 请使用反转字符集 http
  • 优雅地处理没有数据的 amcharts

    我想知道我的 dataProvider 是否为空 amCharts绘制时默认为null 我怎样才能动态地处理它 var chart AmCharts makeChart chartdiv theme none type serial dat
  • 单词之间没有空格的语言(例如亚洲语言)中的断词?

    我想让 MySQL 全文搜索适用于日语和中文文本以及任何其他语言 问题在于这些语言以及可能其他语言通常在单词之间没有空格 当您必须键入与文本中相同的句子时 搜索没有用 我不能只在每个字符之间添加空格 因为英语也必须有效 我想用 PHP 或
  • 如何使用 phpunit 运行单个测试方法?

    我正在努力运行一个名为testSaveAndDrop在文件中escalation EscalationGroupTest php with phpunit 我尝试了以下组合 phpunit EscalationGroupTest escal
  • 如何检查PHP变量是否包含非数字?

    我只是想知道检查 PHP 变量中是否有非数字的方法以及它是否也检测字符之间的空格 需要确保我的表单字段中没有添加任何奇怪的内容 提前致谢 如果您的意思是您只想要一个包含数字的值 那么您可以使用ctype digit http php net
  • FPDI/FPDF:水印和打印多页

    我修改了这个堆栈问题 当用户尝试下载文件时在 pdf 文件上应用水印 https stackoverflow com questions 3983432 applying watermarks on pdf files when users
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • “使用未定义常量”注意,但该常量应该被定义

    共有三个文件 common php controller php 和 user php 文件 common php 如下所示 文件controller php看起来像 文件 user php 如下所示 执行脚本时 会给出通知 注意 使用未定
  • 为什么 iconv 在 php:7.4-fpm-alpine docker 中返回空字符串

    给出以下代码
  • PHP 脚本可以在终端中运行,但不能在浏览器中运行

    我正在尝试执行exec命令 但我遇到了问题 当我运行以下代码时 当我通过浏览器运行它时它不起作用 但如果我把输出 str将其复制并粘贴到终端中 它工作得很好 造成这种情况的原因是什么 我该如何解决 目前我正在运行localhost php
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • PHP HEREDoc (EOF) 语法在 Sublime Text 3 上突出显示与正斜杠的差异

    我不熟悉 Sublime Text 3 如何使用语法突出显示 例如 如果它纯粹依赖于主题 或者它内置于主题运行的标准中 但就我而言 使用 PHP 的 HERE 文档和转发存在一些语法突出显示差异斜线 一旦出现正斜杠 ST3 就会认为以下所有
  • ASP.NET Core 2.1 中不使用正则表达式的 URL 重写

    我的图标位于 images favicon ico而不是根 在Startup cs我可以添加重定向以避免 404 app UseRewriter new RewriteOptions AddRedirect favicon ico imag
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 如何在 Laravel 中使用 PUT http 动词提交表单

    我知道这个问题可能已经提出 但我就是无法让它发挥作用 如果有人可以帮助我 我将非常感激 我安装了 colletive form 但答案也可以是 html 表单标签 现在列出我的表格 我的路线和我的例外情况 Form model array
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B

随机推荐

  • 将编码信息添加到 FOR XML 的结果中[重复]

    这个问题在这里已经有答案了 我有一个脚本 它在 SQL 2008 中使用 FOR XML 返回 XML 有没有办法在输出的开头添加版本和编码信息 最终 我计划将输出保存在文件中 例如 现在我的输出看起来像这样
  • Google Admin sdk 目录 403

    我正在尝试将 googleapi 2 0 与服务帐户一起使用 以在企业域上的用户上使用 Directory gooogle admin sdk 我已按照建议进行操作 this例如 并准备了一个 希望工作 的poc java代码 像这样的东西
  • Cocos2dx Android 构建错误:“arm-linux-androideabi-g++:没有这样的文件或目录”

    我下载了最新的cocos2dx 3 10 和NDK r11 我执行的时候出现以下错误cocos compile p android android studio Error AndroidDev android ndk r11 toolch
  • Delphi 代码格式化程序

    是否有任何实用程序可以重新格式化 Delphi 代码 EDIT 我使用的是德尔福2006 一些反馈 感谢所有回答这个问题的人 我一直在使用 JCF 代码格式化程序 它运行良好 我的代码已格式化为对象 Pascal 风格指南 您可以尝试 绝地
  • 如何使用 php 和 jquery 验证向导表单?

    简要说明这个简单的 jQuery 向导如何工作 会话用于保存每个步骤的数据 由一个会话变量组成 用于保存我们所处的步骤 由一个用于存储表单数据的会话变量组成 每次更改步骤时 我们都会使用 ajax 请求保存表单数据和会话中的步骤 如果数据被
  • Python-要列出的字符串

    我需要将列表转换为字符串并将字符串返回到列表 有一种 python 方法可以实现这种行为吗 l1 aa bb cc s str l1 l2 cast string to list s print l2 aa bb cc 使用序列化库 例如j
  • 这是在 ES6 中克隆对象的好方法吗?

    谷歌搜索 javascript克隆对象 带来了一些非常奇怪的结果 其中一些已经过时了 有些太复杂了 是不是很简单 let clone original 这有什么问题吗 这很好用于浅克隆 The 对象传播是 ECMAScript 2018 的
  • LLVM插入内在函数Cos

    我正在尝试将内部 cos 函数调用插入到 LLVM pass 我在 FunctionPass 中的代码 std vector
  • jquery 验证器 - 即使无效,表单仍然会被提交

    我的表单上有一些带有基本规则的字段 验证器插件在填写表单本身时表现良好 但是 提交时会出现问题 因为即使尚未输入有效的电子邮件地址或在其他文本框中输入任何内容之前 它仍然会提交 这是我的测试功能 function submit form c
  • 将 Python win32evtlog 对象转换为 xml

    我有一个使用 win32evtlog 来获取和显示不同事件的应用程序 我想将显示限制为特定级别的事件 但 win32evtlog 不会返回此信息 似乎您可以将事件转换为 XML 然后提取此信息 但我无法弄清楚如何将事件从循环获取到 XML
  • Threetenbp:解析带有时区名称的日期时出现解析异常

    我正在尝试解析 EEE dd MMM yyyy HH mm ss zzz 格式的日期 例如使用 Threeten 的 DateTimeFormatter 的 Tue 16 May 2017 07 44 48 GMT 之类的字符串 但是 似乎
  • 检查 DirectoryInfo.FullName 是否是特殊文件夹

    我的目标是检查 DirectoryInfo FullName 是否是特殊文件夹之一 这就是我正在做的事情 检查每个特殊文件夹的directoryInfo FullName 如果它们相等 DirectoryInfo directoryInfo
  • 跨进程PostMessage、UIPI限制和UIAccess=”true”

    出于安全原因 我的应用程序的 UI 模块使用high 强制完整性级别 除了一件事之外 其中的所有内容都运行良好 为了与旧版本兼容 我需要能够让用户向 UI 模块发出命令行调用 目前该机制的工作原理如下 Windows 资源管理器中的快捷方式
  • firebase:admin.auth().updateUser()导致auth/user-token过期

    我成功使用电话号码进行了身份验证 我可以检查firebase auth currentUser我已经登录了 然后我调用我的 firebase 管理路由admin auth updateUser uid somevalues 设置用户显示名称
  • java 8流分组和求和双精度

    我对 java 8 中的流非常陌生 所以我的方法可能是错误的 我有 2 个对象如下 object1 BigDecimal amount Code1 code1 Code2 code2 Code3 code3 String desc obje
  • 对具有多个提交的表单进行建模和验证

    我正在尝试找出使用 ASP Net Core 2 建模和验证具有多个表单标签和多个提交按钮的表单的正确方法 我拥有的是一个表单 用户可以在其中输入用户名和密码并登录 或者输入他们的名字 姓氏和手机号码并注册 这是我的模型 public cl
  • 从单独文件中的类访问 MainWIndow 控件

    I add a TextBlock到 XAML 中的主窗口 我需要更改位于单独 cs 文件中的单独类中的 TextBlock 文本 我尝试了以下方法 private static fooNameSpace MainWindow tW1 tW
  • matlab无法捕获子函数中的错误

    我正在尝试在代码中实现错误报告系统 因此我在启动程序时运行的函数周围放置了一个 try catch 它是一个编程 GUI 因此大多数子函数都是按钮或其他 GUI 元素的回调 然而 每当这些子函数中抛出错误时 它都不会被捕获 一些子功能在其他
  • 背包任务中所有组合的数量

    有一个经典背包问题 我对这个问题的版本有点不同 给定一组物品 每个物品都有一个质量 确定包装物品的组合数量 以使总重量小于或等于给定的限制 例如 有 5 个具有质量的项目 1 1 3 4 5 有一个错误limit 7 有以下几种组合 1 3
  • SEO 友好的 URL 而不是查询字符串 .htaccess

    如何修改 htaccess 文件并获取 SEO 友好的 URL 而不是查询字符串 我想实现这 3 个目标 本地主机 示例 产品 代替本地主机 示例 products list php 本地主机 示例 产品 38 代替本地主机 示例 prod