多个参数的 htaccess 重写规则
htaccess Rewriterule for multiple Parameters
我有一个 URL 看起来像:
https://www.example.com/project/api/read.php?uid=1234567&dvc=ABCDE
我想建立一个重写规则,将 URL 变成:
https://www.example.com/project/api/read/1234567/ABCDE
我的尝试是这样的:
RewriteEngine On # Turn on the rewriting engine
RewriteRule ^read/([0-9a-zA-Z_-]*)([0-9a-zA-Z_-]*)$ read.php?uid=&dvc= [NC,L,QSA]
RewriteRule ^read/([0-9a-zA-Z_-]*)([0-9a-zA-Z_-]*)$ read.php?uid=&dvc= [NC,L,QSA]
您在 RewriteRule
模式 中的路径段之间缺少斜杠。
假设您的 .htaccess
文件位于 /project/api
子目录中(正如您的指令所暗示的那样),然后尝试以下操作:
# MultiViews must be disabled for the rewrite to work
Options -MultiViews
# Turn on the rewriting engine
RewriteEngine On
RewriteRule ^read/([\w-]+)/([\w-]*)$ read.php?uid=&dvc= [L,QSA]
\w
是一个 shorthand 字符 class 与 [0-9a-zA-Z_]
相同,我们在其中添加连字符 (-
).
由于URL/read
直接映射到文件/read.php
必须禁用MultiViews,否则mod_negotiation"rewrites"请求/read.php
(在 mod_rewrite 之前)没有任何 URL 参数。
请注意,我在第一个路径段中将量词从 *
更改为 +
,因为这在您的 URL?
中似乎是强制性的
您的示例 URL (/read/1234567/ABCDE
) 在第一个路径段中显示数字,在第二个路径段中显示字母。如果这是 URL 类型的准确反映,则应使正则表达式更具限制性以仅检查此数据类型。
旁白:
RewriteEngine On # Turn on the rewriting engine
请注意,Apache 不支持行尾注释。在这种情况下,这可能是 "OK",因为 RewriteEngine On
之后的文本被简单地忽略了。在其他情况下,您可能会收到 500 内部服务器错误。
我有一个 URL 看起来像:
https://www.example.com/project/api/read.php?uid=1234567&dvc=ABCDE
我想建立一个重写规则,将 URL 变成:
https://www.example.com/project/api/read/1234567/ABCDE
我的尝试是这样的:
RewriteEngine On # Turn on the rewriting engine
RewriteRule ^read/([0-9a-zA-Z_-]*)([0-9a-zA-Z_-]*)$ read.php?uid=&dvc= [NC,L,QSA]
RewriteRule ^read/([0-9a-zA-Z_-]*)([0-9a-zA-Z_-]*)$ read.php?uid=&dvc= [NC,L,QSA]
您在 RewriteRule
模式 中的路径段之间缺少斜杠。
假设您的 .htaccess
文件位于 /project/api
子目录中(正如您的指令所暗示的那样),然后尝试以下操作:
# MultiViews must be disabled for the rewrite to work
Options -MultiViews
# Turn on the rewriting engine
RewriteEngine On
RewriteRule ^read/([\w-]+)/([\w-]*)$ read.php?uid=&dvc= [L,QSA]
\w
是一个 shorthand 字符 class 与 [0-9a-zA-Z_]
相同,我们在其中添加连字符 (-
).
由于URL/read
直接映射到文件/read.php
必须禁用MultiViews,否则mod_negotiation"rewrites"请求/read.php
(在 mod_rewrite 之前)没有任何 URL 参数。
请注意,我在第一个路径段中将量词从 *
更改为 +
,因为这在您的 URL?
您的示例 URL (/read/1234567/ABCDE
) 在第一个路径段中显示数字,在第二个路径段中显示字母。如果这是 URL 类型的准确反映,则应使正则表达式更具限制性以仅检查此数据类型。
旁白:
RewriteEngine On # Turn on the rewriting engine
请注意,Apache 不支持行尾注释。在这种情况下,这可能是 "OK",因为 RewriteEngine On
之后的文本被简单地忽略了。在其他情况下,您可能会收到 500 内部服务器错误。