如何将所有子域请求转换为主域,并保持url重写

时间:2013-10-01 06:21:43

标签: regex apache .htaccess mod-rewrite

你好我有一个主域名和子域名的网站..运行在apache web服务器和centOS上...我还有一个url重写机制,如

http://subdomain.domain.com/buy-a-new-car

我想将所有子域请求重定向到主域,保持网址重写如下:

http://domain.com/buy-a-new-car

我到目前为止的.htaccess代码导致了这个:

http://domain.com/index.php?buy-a-new-car

id喜欢摆脱(index.php?)部分,但我不熟悉编写.htaccess指令并且被REGEX搞糊涂了

这是我目前的代码:

RewriteEngine on
RewriteBase /
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php?/$1

RewriteCond %{HTTP_HOST} ^subdomain.domain.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您需要首先进行重定向,然后在最后,将路由发送到index.php

RewriteEngine on
RewriteBase /
Options -Indexes -Multiviews

# redirect subdomains to main domain
RewriteCond %{HTTP_HOST} ^subdomain.domain.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

# redirect direct accesses to index.php 
RewriteCond %{THE_REQUEST} \ /index\.php\?/([^&\ ]+)&?([^\ ]*)
RewriteRule ^ /%1?%2 [L,R=301]

# route everything to index.php internally
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1

答案 1 :(得分:0)

为什么不使用Redirect和/或RedirectMatch并保存重写内容以实际重写网址?见http://httpd.apache.org/docs/current/rewrite/avoid.html

我发现这是一种更加“自我记录”的方法,每次进入时都不会强迫你理解所有的重写逻辑。