mod_rewrite - 在HTTP主机条件下失败

时间:2010-10-12 11:22:32

标签: .htaccess mod-rewrite http-host

我正在尝试进行一些URL重写 - 但由于某些原因它没有按照我的预期工作(我可能错过了一些非常简单的事情!)。

我有两个网站 - www.domain.local和admin.domain.local。使用下面的.htaccess文件,公共站点重写很好,但管理站点没有按预期工作,因为它被第一个条件拾取(即使回显出HTTP_HOST显示我正在查看管理员网站域名。)

Options -MultiViews
Options +FollowSymLinks

RewriteEngine on
RewriteBase /

## Force www
RewriteCond %{HTTP_HOST} ^domain\.local$ [NC]
RewriteRule ^(.*)$ http://www.domain.local/$1 [R=301,L]

## Public site rewrites   
RewriteCond %{HTTP_HOST} ^www\.domain\.local$ [NC]
RewriteRule ^(home)(/)?$ /index.php [NC]
RewriteRule ^([a-z0-9+-]+)(/)?$ /$1.php [NC,L]

## Admin site
RewriteCond %{HTTP_HOST} ^admin\.domain\.local$ [NC]
RewriteRule ^([a-z0-9+-]+)(/)?$ /manage/$1.php [QSA,L]

我做错了什么?

非常感谢, 千电子伏

1 个答案:

答案 0 :(得分:3)

RewriteCond仅适用于下一个RewriteRule指令,因此在您的情况下,管理员RewriteRule永远不会有机会执行,因为首先应用此无条件规则:

RewriteRule ^([a-z0-9+-]+)(/)?$ /$1.php [NC,L]

有几种方法可以解决这个问题,但最直接的方法是修改您的公共网站部分以包含第二条规则的条件:

## Public site rewrites   
RewriteCond %{HTTP_HOST} ^www\.domain\.local$ [NC]
RewriteRule ^(home)(/)?$ /index.php [NC]
RewriteCond %{HTTP_HOST} ^www\.domain\.local$ [NC]
RewriteRule ^([a-z0-9+-]+)(/)?$ /$1.php [NC,L]