我最近得到了 icyrock.com 的帮助,使用 htaccess 重写将所有子域名请求发送到 domain.com/apps
您可以找到线程这里代码如下:
RewriteBase /
RewriteEngine On
#### URL Rewrite Handler for Subdomains (by Randall Krause) ####
RewriteCond %{ENV:REDIRECT_SUBDOMAIN} =""
RewriteCond %{HTTP_HOST} ^([a-z0-9][-a-z0-9]+)\.domain\.com\.?(:80)?$ [NC]
RewriteCond %{DOCUMENT_ROOT}/apps/%1 -d
RewriteRule ^(.*) apps/%1/$1 [E=SUBDOMAIN:%1,L]
RewriteRule ^ - [E=SUBDOMAIN:%{ENV:REDIRECT_SUBDOMAIN},L]
正如我所说的,这确实很有效,但我需要添加另外两个规则,我在整合它们时遇到了麻烦,因为它们与上面的代码不冲突。
- 对于任何非子域名的请求,我需要主网站网址(http://域名.com)重写为 http://www.domain.com
- 对于任何不针对子域的请求,我还需要重写 URL 以从 URL 中删除 index.php。
其代码如下:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
在子域重写规则破坏它之前,以其当前形式添加它。
我发现的唯一解决方案是通过执行以下操作来明确定义哪些文件不受上述规则的覆盖:
RewriteCond $1 !^(index\.php|images|robots\.txt)
有人有什么想法吗?
谢谢,
蒂姆
答案1
还没有测试过,但是请尝试以下方法(您可能需要进行调整):
RewriteCond %{HTTP_HOST} ^domain\.com(:80)?$ [NC]
RewriteRule ^(.*)(?:index.php)?$ http://www.domain.com/$1 [R=permanent,L]
将代码放在后面RewriteEngine On
(即第一个 之前RewriteCond
)。请注意,它将删除全部 index.php
结局(domain.com/a/b/c/index.php
即将成为www.domain.com/a/b/c/
。取自此处:
我建议你阅读一些关于 mod_rewrite 的内容,例如:
- http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
- http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html
如果你每隔一天就需要它 - 那么就值得了... :)