重写规则以匹配不包含句点(.)的字符串,前提是该字符串也不包含其他特定单词



所以,我正在尝试在.htaccess中使用RegEx,它使用RewriteRule重定向网站。

我的想法是重定向所有不是文件的URL,我以前是这样做的:

RewriteRule ^([^.]+)/?$ index.php?url=$1 [L]

^([^.]+)/?$RegEx的问题是,当我需要时,以下URL不会被重写:

  1. /username/my.username
  2. /个人资料/aother.username
  3. /picture/some.user/最新

它运行得很好,但一旦用户开始在用户名中使用dots(.(,它显然就停止了工作。我假设所有带点(.(的URL都是文件,比如:

  1. /assets/image.png
  2. /index.html

我正在考虑的解决方案是添加一组我知道的必须重写的URL,比如如果包含/username/profile/picture等单词

所以。。。如何以的方式构建RegEx表达式

  1. 只要不存在点(.(,它就会匹配
  2. 或者,如果存在点(.(,则应检查字符串中是否存在/username/profile/picture等单词

我正在尝试这样的东西:

[^.]|([S]+(b/(profile|username)/)+[S])?

但显然不起作用

更容易的方法是像这样使用RewriteCond来避免重写任何文件和目录,但让模式匹配任何内容:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ index.php?url=$1 [L,QSA]

相关内容

最新更新