我将在我的%{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>
答案 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]