是否可以在htaccess中链接RewriteCond?

时间:2012-08-31 15:26:46

标签: apache .htaccess mod-rewrite

我将在我的%{HTTP_HOST}文件中做一些基本的.htaccess工作,并且想知道是否可以做类似的事情:

RewriteCond %{HTTP_HOST} ((foo|bar|baz).com)$
RewriteCond %{DOCUMENT_ROOT}/apps/%1/webroot%{REQUEST_URI}  -d [OR]
RewriteCond %{DOCUMENT_ROOT}/apps/%1/webroot%{REQUEST_URI}  -f
  RewriteRule %{DOCUMENT_ROOT}/apps/%1/webroot%{REQUEST_URI} [L]

RewriteRule ^(.*)$ index.php?uri=$1 [QSA,L]

基本上,如果有人在任何子域上访问foo.com,我希望他们直接从该文件夹提供文件,但也有任何请求不是针对发送到我index.php的特定文件的用于处理的文件(将进行路由)

我问的原因是因为我上面写的内容实际上没有用,所以有办法吗? (如果这应该工作,那么我的.htaccess文件的其余部分显然会出现问题,但只处理一个应用程序文件夹时这一切都有效)

另一种(凌乱的IMO)方式是将所有内容路由到文件夹,并为每个域提供第二个.htaccess文件,但如果可以在一个文件中完成,我宁愿不这样做!< / p>

1 个答案:

答案 0 :(得分:0)

你的第一个重写规则缺少一个正则表达式,这使你想要匹配的重写引擎(作为正则表达式)%{DOCUMENT_ROOT}/apps/%1/webroot%{REQUEST_URI},并且你想要将其重写为[L]。我怀疑你希望它看起来像:

RewriteRule ^ /apps/%1/webroot%{REQUEST_URI} [L]

^匹配任何内容,因为您已经使用3个条件审核了请求。

现在您需要为上一条规则添加一些条件,以便不会盲目地应用于所有内容。你可能想要这样的东西:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?uri=$1 [QSA,L]