Mod 重写以从 URL 获取 ID

Mod 重写以从 URL 获取 ID

我有以下真实的 URL 结构

/folder/folder2/file1.php
/folder/folder3/file2.php

其中file1file2可以是任何 PHP 文件。

我也有

/folder/folder2/folder4/file1.php
/folder/folder3/folder4/file2.php

我想要更改 URL 以便它们包含如下 ID:

/folder/12345/folder2/file1.php

我想要做的是创建一个 mod_rewrite 规则,获取 ID 并运行没有 ID 部分的 URL

所以

/folder/12345/folder2/file1.php

会运行

/folder/folder2/file1.php?id=12345

要实现这个目的,mod_rewrite 规则是什么样的?

另外,当我以 POST 或 GET 形式提交表单时会发生什么? mod 重写可以与 post 或 get 一起使用吗?

答案1

根据您的问题,我假设您只想重写以下形式的 URL:

  • /folder/<id>/folder2/<anyfile.php>
  • /folder/<id>/folder3/<anyfile.php>

其中folderfolder2folder3是已知子目录。但.php文件可以是任何内容。

(这排除/folder/folder2/folder4/file1.php/folder/folder3/folder4/file2.php

也假定<id>仅为数字(如您的示例所示)。如果有其他限制,例如长度始终为 5 位数字,那么也应将其包括在内。

你可以使用 mod_rewrite 做类似下面的事情:

RewriteEngine On

RewriteRule ^/?(folder)/(\d+)/(folder2|folder3)/([^./]+\.php)$ /$1/$3/$4?id=$2 [QSA,L]

$n是对括号中的子模式的反向引用RewriteRule 图案

QSA标志将附加来自请求的查询字符串(如果有) - 如果您通过 GET 向其中一个 URL 提交表单,则需要该标志。

另外,当我以 POST 或 GET 形式提交表单时会发生什么? mod 重写可以与 post 或 get 一起使用吗?

GET 和 POST 请求都将被重写。

相关内容