为通用.htaccess文件构建路径无关的mod_rewrite语句

时间:2010-04-10 18:58:34

标签: apache .htaccess mod-rewrite

假设我在共享的Web根目录下存储了三个小型Web应用程序:

  • www.example.com/app1 /
  • www.example.com/app2 /
  • www.example.com/app3 /
  • www.example.com/app4 /

每个应用程序都有一个.htaccess文件,其中包含一些不相同的mod_rewrite语句来重写网址,如

RewriteCond %{REQUEST_URI} ^/app1/([^/]+)/([^/]+)\.html$
RewriteRule .* /app1/index.php?selectedProfile=%1&match=%2&%{QUERY_STRING}

现在,我想在每个.htaccess目录中都有一个泛型 /app{n}文件。因此,RewriteConds中没有RewriteBase/app{n}前缀。

我的一个想法是让第一级也成为通配符目录:

RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([^/]+)\.html$

只有在输入.htaccess目录时才会触发/app{n}文件,这应该可以。

这是一个可以接受的解决方案吗?

还有其他更好的吗?

1 个答案:

答案 0 :(得分:2)

您无需指定完整路径。您可以使用从基本路径解析的相对路径。

所以试试这条规则:

RewriteRule ^([^/]+)/([^/]+)\.html$ index.php?selectedProfile=$1&match=$2 [QSA]

您甚至可以在文档根目录中使用此单个规则:

RewriteRule ^(app\d+)/([^/]+)/([^/]+)\.html$ $1/index.php?selectedProfile=$2&match=$3 [QSA]