2

我需要将一些直接请求映射到自定义脚本:

somesite.com/getfile/file_name.xxx
somesite.com/getfile/type1/file_name.xxx
somesite.com/getfile/type2/file_name.xxx
somesite.com/getfile/type3/file_name.xxx

为了完成这项任务,我使用以下规则创建了一个 .htaccess:

RewriteEngine On
RewriteRule  ^getfile/(.*)/(.*) /script_path/getfile/file.php?pn=$2&type=$1 [L,NC]
RewriteRule  ^getfile/(.*) /script_path/getfile/file.php?pn=$1 [L,NC]

一切似乎都很好,但如果我调用这样的网址:

somesite.com/test_path/other/getfile/test.php

这个 url 将被重定向到file.php脚本!

我只需要在要发送到脚本的域名之后立即以 getfile 开头的路径。

somesite.com/getfile -> need to be redirected
somesite.com/test_path/other/getfile/ -> must not be redirected

站点文件夹结构

/
|_www
   |_serverRootFolder (the .htaccess file here, this is the apache serverRoot is www.somesite.com/)
   |_script_path
4

1 回答 1

2

(.*)/(.*)尽可能向右匹配。要仅匹配域之后的那些,而不是(.*)任何东西,使用([^/]+)which 表示“非斜杠”,这样它只会转到下一个斜杠。我在最后也加了一句$,说后面没有别的了。

RewriteRule ^getfile/([^/]+)/([^/]+)$ /script_path/getfile/file.php?pn=$2&type=$1 [L,NC]
RewriteRule ^getfile/([^/]+)$ /script_path/getfile/file.php?pn=$1 [L,NC]
于 2013-06-02T00:26:13.670 回答