所以,我正在尝试在.htaccess中使用RegEx,它使用RewriteRule重定向网站。
我的想法是重定向所有不是文件的URL,我以前是这样做的:
RewriteRule ^([^.]+)/?$ index.php?url=$1 [L]
此^([^.]+)/?$
RegEx的问题是,当我需要时,以下URL不会被重写:
- /username/my.username
- /个人资料/aother.username
- /picture/some.user/最新
它运行得很好,但一旦用户开始在用户名中使用dots(.(,它显然就停止了工作。我假设所有带点(.(的URL都是文件,比如:
- /assets/image.png
- /index.html
我正在考虑的解决方案是添加一组我知道的必须重写的URL,比如如果包含/username、/profile和/picture等单词
所以。。。如何以的方式构建RegEx表达式
- 只要不存在点(.(,它就会匹配
- 或者,如果存在点(.(,则应检查字符串中是否存在/username、/profile和/picture等单词
我正在尝试这样的东西:
[^.]|([S]+(b/(profile|username)/)+[S])?
但显然不起作用
更容易的方法是像这样使用RewriteCond
来避免重写任何文件和目录,但让模式匹配任何内容:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ index.php?url=$1 [L,QSA]