0

我有一个服务于许多网站的应用程序,我正在使用 Apache mod-rewrite 来映射这样的 url

http://site1.net/controller
http://site2.net/controller2/another_view
http://site3.net/
http://special_case.net/

映射到:

index.php?url=http://site1.net/controller
index.php?url=http://site2.net/controller2/another_view
index.php?url=http://site3.net/
index.php?url=http://special_case.net/hub

我的重写规则是:

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

它处理除了最后一种特殊情况之外的所有情况,在处理特定域时,我需要强制使用称为“集线器”的控制器。我在这个项目上与其他人合作,这意味着一旦调用索引文件,我就无法对路由做任何事情。

有人可以修复我的规则,以便解决上述所有情况吗?

4

2 回答 2

1

您当前的规则似乎没有将主机名添加到 url 获取参数中。所以我将其添加到以下内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteCond %{HTTP_HOST} ^(special_case\.net)$
RewriteRule ^(.*)$ index.php?url=http://%1/hub/$1 [QSA,L]

RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ index.php?url=http://%1/$1 [QSA,L]
于 2012-05-21T18:31:13.840 回答
-1
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^http://special_case.net index.php?url=http://special_case.net/hub [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
于 2012-05-21T18:03:02.533 回答