.htaccess 重写配置文件用户的URL Htaccess,"“”(点)htaccess不起作用

fae0ux8s  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(114)

我需要为我的用户实现重写规则,此类型为:

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

仍然不起作用,我如何使它起作用?

tct7dpnv

tct7dpnv1#

您面临的问题是,重写模块无法确定类似“abcde.fghi”的内容是用户名还是带有“文件扩展名”的文件名。
您可以尝试通过解释重写模块的例外来解决这个问题,这里是通过一个条件,允许实际规则的应用程序只获取请求路径的applid不 * 指向现有文件:

RewriteEngine on
RewriteCond {REQUEST_FILENAME} !-f
RewriteRule ^([@a-zA-Z0-9._-]+)/?$ user.php?p=profile&username=$1

然而,这有一个令人讨厌的暗示,即对于一个名为“styles.css”的用户来说,它现在不会像预期的那样工作...
这个问题的根源实际上并不在于你的重写尝试,而在于你如何尝试发布这些用户配置文件。你应该使用一个唯一的前缀来防止这种无法解决的问题。比如像https://example.com/profile/user.strike18这样的URL。这显然会允许一个精确的重写规则,而 * 没有 * 任何你目前面临的命名冲突。

相关问题