.htaccess仅从站点根目录重定向一个级别

时间:2013-05-28 12:06:27

标签: apache .htaccess mod-rewrite redirect

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

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

此网址将重定向到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

1 个答案:

答案 0 :(得分:2)

(.*)/(.*)尽可能地匹配到右边。要仅匹配域之后的那些,而不是(.*),而不是([^/]+),请使用$,这意味着“不斜线”,因此它只会转到下一个斜杠。我最后还添加了RewriteRule ^getfile/([^/]+)/([^/]+)$ /script_path/getfile/file.php?pn=$2&type=$1 [L,NC] RewriteRule ^getfile/([^/]+)$ /script_path/getfile/file.php?pn=$1 [L,NC] ,说这些没有其他内容。

{{1}}