Apache 允许在RewriteRule.htaccess中使用点字符

Apache 允许在RewriteRule.htaccess中使用点字符,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我想在此重写规则中允许点: RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ index.php?D1=$1&D2=$2&D3=$3 [NC,QSA,L] RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ index.php?D1=$1&D2=$2 [NC,QSA,L] RewriteRule ^([a-zA-Z0-9\-]+)/?$ in

我想在此重写规则中允许点:

RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ index.php?D1=$1&D2=$2&D3=$3 [NC,QSA,L]
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ index.php?D1=$1&D2=$2 [NC,QSA,L]
RewriteRule ^([a-zA-Z0-9\-]+)/?$ index.php?D1=$1 [NC,QSA,L]
如果我用这个:

RewriteRule ^([a-zA-Z0-9\-\.]+)/?$ index.php?D1=$1 [NC,QSA,L]
根目录中D1的值是“index.php”,而不是空值

有什么想法吗


谢谢

这可能并不明显,但如果你仔细想想,你会明白的。关键是您已经有了一个内部重写规则

因此,如果你打开你的网站
example.com
,你实际上会得到
example.com/index.php

现在添加一些自定义重写规则。第一个没有点include so
index.php
不匹配,但第二个有点include so
([a-zA-Z0-9\-\.]+)
也将匹配
index.php
,因此将其重写为
index.php?D1=index.php

如何修复它? 非常简单:排除index.php,如下所示:

RewriteCond %{REQUEST_URI} !^/?index\.php
RewriteRule ^([a-zA-Z0-9.-]+)/?$ index.php?D1=$1 [NC,QSA,L]

这可能并不明显,但如果你仔细想想,你就会明白。关键是您已经有了一个内部重写规则

因此,如果你打开你的网站
example.com
,你实际上会得到
example.com/index.php

现在添加一些自定义重写规则。第一个没有点include so
index.php
不匹配,但第二个有点include so
([a-zA-Z0-9\-\.]+)
也将匹配
index.php
,因此将其重写为
index.php?D1=index.php

如何修复它? 非常简单:排除index.php,如下所示:

RewriteCond %{REQUEST_URI} !^/?index\.php
RewriteRule ^([a-zA-Z0-9.-]+)/?$ index.php?D1=$1 [NC,QSA,L]

嗨,网络设计师,谢谢!但如果我使用第二个条件,停止工作!我更新了问题。嗨,网络设计师,谢谢!但如果我使用第二个条件,停止工作!我更新了问题。