.htaccess基于URL的多子文件夹重定向

时间:2014-10-31 20:12:49

标签: php .htaccess mod-rewrite redirect

我想使用多个子文件夹的httaccess将请求重定向到相应的文件。

例如(目标):

1)www.mysite.com - > /var/www/mysite/website/index.php

2)www.mysite.com/app - > /var/www/mysite/app/web/index.php

3)www.mysite.com/app2 - > /var/www/mysite/app2/web/index.php

使用以下代码,我可以实现第2步:

RewriteCond %{REQUEST_URI} ^/app/
RewriteCond %{HTTP_HOST} ^(www\.)?mysite\.
RewriteRule ^(.*)$ ../app/web/$1 [L]

但如果我添加例如..

RewriteCond %{REQUEST_URI} !^/website/
RewriteCond %{HTTP_HOST} ^(www\.)?mysite\.
RewriteRule ^(.*)$ /website/$1 [L]

1)效果很好,但2)停止工作......显然第二段代码覆盖了第一段......但我不知道如何处理这个问题。

如果有一个易于理解和/或易于实现的答案,特别是我找不到这个目标。

任何人都可以分享如何一起实现第1步和第2步的例子吗?或者即使它是不可能的,唯一的方法是使用"类别" (app,app2,网站)在所有情况下都在网址中。

感谢任何帮助

2 个答案:

答案 0 :(得分:0)

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代码:

DirectoryIndex index.php
RewriteEngine On
RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

RewriteRule ^/?$ website/ [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)(/.*)?$ /$1/web$2 [L]

答案 1 :(得分:0)

您无需检查HTTP_HOST,因为所有请求都会匹配。您也不需要检查REQUEST_URI,因为您可以在RewriteRule的模式部分中执行此操作。对于其他人,您可以使用简单,具体的规则

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app2 /app2/web/index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app /app/web/index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /website/index.php [L]

您必须注意规则的顺序。如果app是第一个,它也会匹配app2。这些规则假定文档根目录在/var/www/mysite中。如果它位于/var/www中,则必须在替换前添加/mysite,例如/mysite/app2/web/index.php等等。