0

我正在尝试将子域重写到 htaccess 上的子目录。在这里搜索我做了以下规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www)\. [NC]
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com\.br
RewriteCond %{REQUEST_URI} !^/sd_
RewriteRule ^(.*)$ http://domain.com.br/sd_%1/$1 [P,L,NC,QSA]

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.*)\.domain\.com\.br
RewriteCond %{REQUEST_URI} !^/sd_
RewriteRule ^(.*)$ http://domain.com.br/sd_%1/$1 [P,L,NC,QSA]

#Rewrite for my Framework
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1

当我访问地址:http ://user.domain.com.br或地址:http ://www.user.domain.com.br 时,它们会被重定向,而不会将 URL 地址更改为:http://www .domain.com.br/sd_user/

好吧,很好。我的问题是:
当有人访问没有文件夹的地址时,.htaccess 将其重定向到特定文件夹。例如:
我没有名为“sd_joecompany”的文件夹,那么我想将其重定向到名为“sd_system”的默认文件夹。如果我访问http://joecompany.domain.com.br/并且不存在相应的文件夹,则此地址可能指向保留该地址的“sd_system”。

使用此代码,当我访问没有相应文件夹的子域时,会出现以下错误:

代理错误

代理服务器收到来自上游服务器的无效响应。代理服务器无法处理请求 GET /index.php。

原因:Max-Forwards 已达到零 - 代理循环?

我不确定我的疑问是否清晰,我为我糟糕的英语感到抱歉。我对 .htaccess 和这些规则略知一二。关于上面的代码,我聚集在这里!

从现在开始谢谢你!

4

1 回答 1

2

如果它们在同一台服务器上并且具有相同的文档根目录,那么您真的根本不想代理。删除规则的主机部分并去掉“P”:

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/sd_
RewriteCond %{HTTP_HOST} !^(www)\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com\.br$ [NC]
RewriteCond %{DOCUMENT_ROOT}/sd_%1%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/sd_%1%{REQUEST_URI} -d
RewriteRule ^(.*)$ /sd_%1/$1 [L,NC,QSA]

RewriteCond %{REQUEST_URI} !^/sd_
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.domain\.com\.br$ [NC]
RewriteCond %{DOCUMENT_ROOT}/sd_%1%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/sd_%1%{REQUEST_URI} -d
RewriteRule ^(.*)$ /sd_%1/$1 [L,NC,QSA]

#Rewrite for my Framework
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1

清理了一些正则表达式并摆脱了额外RewriteEngine On的 's。

于 2013-09-06T18:52:04.147 回答