Regex Apache mod_重写结束期间

Regex Apache mod_重写结束期间,regex,.htaccess,mod-rewrite,Regex,.htaccess,Mod Rewrite,我正试图更好地理解Apache的mod_重写,结果出乎意料。我尝试过许多不同的表达方式,但似乎没有任何表现出我应该如何理解它 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ index.php?route=$1 [QSA,L] 使用www.domain.c

我正试图更好地理解Apache的mod_重写,结果出乎意料。我尝试过许多不同的表达方式,但似乎没有任何表现出我应该如何理解它

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)$ index.php?route=$1 [QSA,L]
使用
www.domain.com/item1/item2/item3
产生
item1/item2/item3

使用
www.domain.com/item1/item2/item3.php
产生
item1/item2/item3.php

使用
www.domain.com/item1/item2/item3……….
产生
item1/item2/item3

为什么不是
item1/item2/item3…….

奇怪的是,如果URL是
www.domain.com/item1/item2/item3……….a
,那么路径就是我所期望的,
item1/item2/item3……….a

我尝试过其他一些正则表达式,但它们的作用类似


谢谢。

虽然我还没有找到解释Apache/.htaccess/mod_rewrite为什么会这样的文档,但我有一个替代方案,以防任何人遇到这种情况

在PHP中,可以使用一些服务器变量,而不是使用.htaccess将请求的文件名传递到querystring变量中,如上面问题中的
route
。因此,我将index.php中的逻辑从读取querystring更改为:

trim( $_SERVER['REDIRECT_URL'], "/" );

重定向URL(和请求URI)服务器变量将保留尾随点,修剪将去掉前导斜杠和尾随斜杠,这与重写规则类似。

我也遇到了同样的问题,这似乎是Windows平台上Apache的一个bug。但是,它可以在Linux上工作


一直在寻找有关此行为的文档,但找不到。似乎其他人也有同样的经历:mod_rewrite strips training dots:Hmmm,谢谢链接。我没能找到那个。听起来这是mod_rewrite的正确行为。