如果你想要一个
在后台重定向
这是您不想要重定向(HTTP 协议重定向)。
你想要的是一个内部重定向,或别名,或在 mod-rewrite slug 中重新映射。通过删除/
重写部分中的部分,您可以成功地告诉 mod-rewrite 您正在编写的是文件系统路径而不是 un url 路径,这样:
RewriteRule ^/~([a-zA-Z]+)/?$ index.php?user=$1 [L,QSA,NC]
或者更好的是,mod-rewrite 足以令人困惑,不再使用短标签:
RewriteRule ^/~([a-zA-Z]+)/?$ index.php?user=$1 [last,qsappend,nocase]
现在 mod-rewrite 理解你的规则的方式取决于这条规则的位置,它在 Virtualhost 的一般配置中吗?它在一个Directory
或Location
指令内吗?它在.htaccess 中吗?子目录中的 .htaccess (在这种情况下,在 RewriteBase 中设置了什么?)。所以事实上它总是一个谜。删除“/”可能会破坏规则。检查官方文档末尾的“GET /somepath/pathinfo”示例,对于人类来说,没有简单的规则(有人将这个作为程序规范发送给我,我会告诉他休息一下并寻求一些有偿帮助)。
但是使用PT|passthrough标志可能会成功,这个标志意味着你真的希望这个重写由文件系统映射子系统而不是 url 映射来处理。
RewriteRule ^/~([a-zA-Z]+)/?$ index.php?user=$1 [last,qsappend,nocase,passthrough]
另请注意,捕获用户名^/~([^/]+)/?$
可能比 ^/~([a-zA-Z]+)/?$
(例如使用用户名 foo42 测试)更好。