我正在尝试进行一些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]
我做错了什么?
非常感谢, 千电子伏
答案 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]