目前我只是在.htaccess文件中匹配数字,字母,短划线和下划线:
RewriteRule ^([A-Za-z0-9-_]+)/?$ index.php?folder=$1
我也希望匹配字符串中的句号。我不想用:
(.*)
我试过了:
([.A-Za-z0-9-_]+)
([\.A-Za-z0-9-_]+)
([\\.A-Za-z0-9-_]+)
([A-Za-z0-9-_\.]+)
其中任何一个似乎都无法工作......我怎样才能完全停止,以便匹配一个句号!
----------补充资料----------------
举个例子:
mydomain.com/groups/green/应该转到index.php?folder = green
此外,我还重写了这个上面的子域名(我认为这导致了并发症)......
anotherdomain.com应该映射到index.php?folder = anotherdomain.com
我已成功使用以下规则重写了子域:
# external group domain name
RewriteCond %{ENV:Rewrite-Done} !^Yes$
## exclude requests from myhost.com
RewriteCond %{HTTP_HOST} !^www\.myhost\.com
## allowed list of domain masking domains
RewriteCond %{HTTP_HOST} ^(anotherdomain.com|extra.domain.com|external.otherdomain.com)
RewriteRule (.*) /groups/%1/$1
我认为这就是复杂性所在。
----------------解决方案----------------------
尽管没有找到上述确切问题的解决方案,但我通过改变第一个重定向(映射外部域)来解决这个问题:
RewriteRule (.*) /groups/%1/$1
为:
RewriteRule (.*) /groups/external/$1&external_domain=%1
第二次重写(在文件夹上)可以解释“外部域”变量而不是文件夹。
答案 0 :(得分:1)
你的第一个选择是最简单的,也是正确的。方括号内.
没有特殊含义,所以你要逐字包括它,不需要任何特殊的转义。
实际上0-9-_
中的第二个短划线存在一个小问题。如果你想在方括号内使用破折号,你应该把它放在字符类的开头。否则它将具有定义字符范围的特殊含义:
([-.A-Za-z0-9_]+)
如果这不起作用,则RewriteRule会出现其他问题。例如,如果这是一个全局规则而不是每个目录(没有RewriteBase),那么URL将以斜杠/
开头。