我有以下真实的 URL 结构
/folder/folder2/file1.php
/folder/folder3/file2.php
其中file1
和file2
可以是任何 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>
其中folder
,folder2
和folder3
是已知子目录。但.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 请求都将被重写。