【问题标题】:mod_rewrite - failing on HTTP host conditionmod_rewrite - 在 HTTP 主机条件下失败
【发布时间】:2011-04-24 06:24:47
【问题描述】:

我正在尝试进行一些 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]

我做错了什么?

非常感谢, 凯夫

【问题讨论】:

    标签: .htaccess mod-rewrite http-host


    【解决方案1】:

    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]
    

    【讨论】:

    • 谢谢蒂姆-无论如何我最终还是选择了这个(但我认为我只是稍微修改了一下:))。
    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 2020-07-15
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 2013-08-16
    相关资源
    最近更新 更多