使用 .htaccess 动态 URL 重写

2024-03-19

我对 .htaccess 重写还很陌生,我正在尝试创建规则来动态重写 URL。

例如,假设用户输入以下 URL:

http://example.com/xxx/?user=2002

它将被重写为:

http://example.com/xxx/user/2002/

如果用户传递多个参数,如下所示:

http://example.com/xxx/?user=2002&activity=100&result=true

它应该变成:

http://example.com/xxx/user/2002/activity/100/result/

注意:所有查询字符串都将动态生成。

这就是我想出的:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /news/

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /news/index.php [L]
</IfModule>

Update

我试图让上面的代码和查询字符串重写代码一起工作。修改后的 .htaccess 如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /news/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /news/index.php [L]

# first take out query string from your /xxx/ URLs
RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^news/?$ %{REQUEST_URI}/%{QUERY_STRING}? [L]

# now convert & to /
RewriteRule ^([^&]+)&(.*)$ $1/$2 [L]

# now convert = to /
RewriteRule ^([^=]+)=([^=]+=.*)$ $1/$2 [L]    
RewriteRule ^([^=]+)=([^=]+)$ $1 [L,R]

# internal rule to replace /n1/v1/n2/v2 to QUERY_STRING
RewriteRule "^(news)/([^/]+)/([^/]*)(/.*)?$" /$1$4?$2=$3 [L,QSA]
</IfModule>

这些规则确实很棘手。将这些递归规则放入根 .htaccess 中:

RewriteEngine On
RewriteBase /news/

# first take out query string from your URLs
RewriteCond %{THE_REQUEST} \?\S+
RewriteRule ^/?$ %{QUERY_STRING}? [L]

# now convert all & to /
RewriteRule ^([^&]+)&(.*)$ $1/$2 [L]

# now convert all = to /
RewriteRule ^([^=]+)=([^=]+=.*)$ $1/$2 [L]
RewriteRule ^([^=]+)=([^=]+)$ $1/$2 [L,R]

# finally an internal rule to replace /n1/v1/n2/v2 to QUERY_STRING
RewriteRule "^([^/]+)/([^/]*)(?:/(.*))?$" $3?$1=$2 [L,QSA]

## Your existing stuff followed now
RewriteRule ^index\.php$ - [L]

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

使用 .htaccess 动态 URL 重写 的相关文章

随机推荐

  • 为什么我的温莎城堡控制器工厂的 GetControllerInstance() 被调用为空值?

    我正在使用温莎城堡来管理控制器实例 除其他外 我的控制器工厂如下所示 public class WindsorControllerFactory DefaultControllerFactory private WindsorContain
  • 在 iPhone 重启时启动 iOS BLE Central 应用程序

    我计划使用 CoreBluetooth 框架开发一个 iOS 应用程序 该应用程序可以连续监控计步器外围设备并计算脚步数 我知道 如果后台执行模式设置为 BLE Central 应用程序即使在后台也将继续接收 BLE 事件 Apple 文档
  • SQL存储过程检查表中的值是/否并执行sql

    检查table1中value是否 Y 然后立即执行sql select if select value1 from table1 where value desc Indicator and value1 Y then execute im
  • Elasticsearch 连接超时

    from datetime import datetime from elasticsearch import Elasticsearch es Elasticsearch doc author kimchy text Elasticsea
  • 如何从 TinyDB 数据库中检索单个值?

    我正在学习如何在 Python 上使用 TinyDB 并且我已经掌握了基础知识 添加 删除 更新等 但现在我正在尝试从数据库中检索特定值 我正在使用的代码在这个方法中 def showpassword show userdb get whe
  • 在 Go 中模拟 HTTPS 响应

    我正在尝试为向 Web 服务发出请求的包编写测试 我遇到问题可能是由于我对 TLS 缺乏了解 目前我的测试看起来像这样 func TestSimple server httptest NewServer http HandlerFunc f
  • 原则 2 中的动态表/实体名称

    我希望有人能够阐明我的代码发生了什么 我需要一个实体来表示通用表 作为具有 X id 后缀的表的模型 例如 我有一个实体 CustomerX 我需要查询的表是 cusotmer 1 customer 2 customer 3 等 我目前正在
  • select unique * 查询有多贵

    在sql server 2012中 我有一个包含超过2500万行且有重复项的表 该表没有唯一索引 它只有一个非聚集索引 我想消除重复项 所以我想到了以下内容 select distinct into temp table from prim
  • Angular CLI 在 ng 服务上偶尔会冻结计算机

    我有问题ng serve 当我在我的 Angular 项目上运行它时 大约 10 的时间 它会在此过程中冻结 并且整个计算机也会冻结 有时它会在一段时间 从20秒到120秒 后解冻并成功编译 有时我需要手动关闭计算机电源 我已经在 2 台计
  • 在 CSS 中应该使用 rgba(0, 0, 0, 0) 还是 rgba(255, 255, 255, 0) 来实现透明度?

    你应该使用rgba 0 0 0 0 or rgba 255 255 255 0 CSS 的透明度 各自的优点和缺点是什么 最后一个参数为rgba 函数是 alpha 或 opacity 参数 如果您将其设置为0它将意味着 完全透明 前三个参
  • 将datagridview导出到word文档c#

    我正在尝试将数据网格导出到Word文档 但不是这个结果 EmployeeID EmployeeName Birth Phone Address DateOfHiring Salary EmloyeeType 1 name 1 11 test
  • Mandrill 通过 Laravel / PHP 入站电子邮件

    我想知道是否有人可以帮助我解决我在研究 Laravel 和通过 Mandrill 入站电子邮件处理相关问题时遇到的一些问题 基本上我希望能够通过 Mandrill 接收电子邮件并将它们存储在我的 Laravel 数据库中 现在我不确定我是否
  • 将闪亮的小部件显示与特定的导航栏 tabPanel() 选择连接起来

    我有一个闪亮的仪表板 其中有一个导航栏页面 其中包含两个 tabPanel Summary and Available Funds Then Available Funds 由一个tabsetPanel 有两个选项卡面板 Plot and
  • Android蓝牙UUID连接APP到ANDROID

    我正在构建一个 Android 应用程序 用于跟踪设备上的蓝牙连接 并在超出范围时触发警报 Android 文档要求提供 UUID 才能建立连接 uuid 是用于唯一标识信息的字符串 ID 的通用唯一标识符 UUID 标准化 128 位格式
  • 如何在多个显示器上正确使用 SetDisplayConfig?

    我正在创建一个小程序 它将包含桌面中的所有显示器 扩展模式 或禁用所有辅助显示器 显示器可以连接到 GPU 和集成显卡 该程序适用于Windows 7 因此根据互联网上的信息 我决定使用CCD API 但遇到了SetDisplayConfi
  • 带有空 RHS 的“dcast”[重复]

    这个问题在这里已经有答案了 有没有办法在不首先指定要翻转的变量的情况下翻转我的数据 在我看来 逻辑默认值似乎是组内索引 例如 DT lt data table id rep 6 10 each 3 var rnorm 15 DT id va
  • TypeScript:如何从类型中提取泛型参数?

    假设我有这样的类型React ComponentClass
  • JComboBox 填充枚举变量值

    我有一个JComboBox我用这种方式制作的enum其价值观 JComboBox
  • migrate.exe 忽略绑定重定向

    我正在尝试运行migrate exe申请来自EntityFramework在特定的 DLL 上 该DLL引用了Microsoft Azure KeyVault WebKeynuget 包 当我尝试运行命令时 migrate MyProjec
  • 使用 .htaccess 动态 URL 重写

    我对 htaccess 重写还很陌生 我正在尝试创建规则来动态重写 URL 例如 假设用户输入以下 URL http example com xxx user 2002 它将被重写为 http example com xxx user 20