我需要为我的用户实现重写规则,此类型为:
https://domain/user.strike18
问题是,使用这个正则表达式,任何包含“点”的url都会返回错误。
例如
https://domain/register.php
https://domain/styles.css
所以我在正则表达式里加了一个点。
RewriteRule ^([@a-zA-Z0-9._-]+)$ user.php?p=profile&username=$1
RewriteRule ^([@a-zA-Z0-9._-]+)/$ user.php?p=profile&username=$1
仍然不起作用,我如何使它起作用?
1条答案
按热度按时间tct7dpnv1#
您面临的问题是,重写模块无法确定类似“abcde.fghi”的内容是用户名还是带有“文件扩展名”的文件名。
您可以尝试通过解释重写模块的例外来解决这个问题,这里是通过一个条件,允许实际规则的应用程序只获取请求路径的applid不 * 指向现有文件:
然而,这有一个令人讨厌的暗示,即对于一个名为“styles.css”的用户来说,它现在不会像预期的那样工作...
这个问题的根源实际上并不在于你的重写尝试,而在于你如何尝试发布这些用户配置文件。你应该使用一个唯一的前缀来防止这种无法解决的问题。比如像
https://example.com/profile/user.strike18
这样的URL。这显然会允许一个精确的重写规则,而 * 没有 * 任何你目前面临的命名冲突。