0

关于这个重写模块,有人可以再次帮助我吗?

有了这个规则

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) $1.php [QSA,L] 

使用此规则,我可以将请求的 URL www.example.com/test 获取到 www.example.com/test.php 但我如何才能将以下 URL www.example.com/test/test2/test3/test4 获取到 www。 example.com/test.php

我试过

RewriteRule (.*)/?$ $1.php [QSA,L]

别笑我……我真的试过了

RewriteRule (.*)/(.*)/(.*)/(.*)$ $1.php [QSA,L] 

这适用于这个链接

www.example.com/test/test2/test3/test4 到 www.example.com/test.php

但是,不是这个……

www.example.com/test 到 www.example.com/test.php

我在Php上使用explode,因为我不知道我需要多少个参数,如果它只有2个参数,那么这个规则应该是有效的。

RewriteRule ^(.+/)?([^/]*)$ p.php?s=%1&p=$2 [QSA,L,NC]

我确实一直在检查每个出现在右侧的类似问题,但我还没有看到任何解决方案。

4

1 回答 1

0

您正在创建一个无休止的重定向。.php在请求中尝试此检查。此外,如果您不拉斜线,Apache 将重定向到某个文件夹内不存在的 index.php。

示例 1

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)/ $1.php [QSA,L]

这需要第一个匹配的目录并将其拉入查询字符串。

www.example.com/file/param1/param2/param3显示了这个www.example.com/file.php

示例 2

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)/(.*)$ $1.php?params=$2 [QSA,L]

这需要第一个匹配的目录并将其拉入查询字符串。URI 的其余部分作为参数添加

www.example.com/file/param1/param2/param3 显示了这个www.example.com/file.php?params=param1/param2/param3

示例 3

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)/?([^/.]+)?/?([^/.]+)?/?([^/.]+)?$ $1.php?p1=$2&p2=$3&p3=$4 [QSA,L]

www.example.com/file/param1/param2/param3 显示了这个www.example.com/file.php?p1=param1&p2=param2&p3=param3


注意:[QSA]保留现有参数,因此&original_parameter=param附加到重写的查询字符串。

于 2013-05-07T23:22:52.400 回答