1

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

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

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

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

到目前为止,我拥有的 .htaccess 代码导致:

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

我想摆脱 (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]

任何帮助将不胜感激 !

4

2 回答 2

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
于 2013-10-01T06:38:48.100 回答
0

为什么不使用Redirect和/或RedirectMatch保存 Rewrite 的东西来真正重写 URL?见http://httpd.apache.org/docs/current/rewrite/avoid.html

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

于 2013-10-01T07:42:58.253 回答