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

时间:2017-10-04 02:42:29

标签: 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\-]+)/?$ index.php?D1=$1 [NC,QSA,L]

如果我使用这个:

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

根目录中D1的值是" index.php"而不是空值。

有关于此的任何想法吗?

由于

1 个答案:

答案 0 :(得分:0)

它可能并不明显,但如果你考虑一下,你会得到它。 Point已经有了内部重写规则。

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

现在添加一些自定义重写规则。第一个没有包含点,因此index.php不匹配,但第二个包含点数,因此([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]