【问题标题】:htaccess - redirect only non-subdomain requestshtaccess - 仅重定向非子域请求
【发布时间】:2014-08-14 05:10:59
【问题描述】:

...当然除了 www,它也是一个子域。

这是我当前添加了 cmets 的 htaccess 规则:

RewriteEngine On

#redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

#what does this do?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/login/

#rewrite /a/1 to /index.php?action=a&urlId=1
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?action=$1&urlId=$2 [L,QSA]

#rewrite /a to /index.php?action=a
RewriteRule ^([^/]+)/?$ index.php?action=$1 [L,QSA]

现在我的问题是,我添加了两个子域 a.domain.com 和 b.domain.com 指向同一个目录,因此通过相同的 htaccess - 但它们用于直接静态文件访问。如何防止a.example.comb.example.com完全使用上述规则?

也许有人可以解释这是做什么的:

#what does this do?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/login/

谢谢!

【问题讨论】:

    标签: apache .htaccess


    【解决方案1】:

    解决方案是在执行RewriteRule之前添加一个检查主机是否为domain.com的条件

    RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
    

    关于您的第二个问题,一个或多个 RewriteCond 指令不是单独的指令,而是与 RewriteRule 相关联,它们是执行 RewriteRule 必须有效的条件。

    在你的情况下:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/login/
    RewriteRule ^([^/]+)/([^/]+)/?$ index.php?action=$1&urlId=$2 [L,QSA]
    

    仅当请求的 uri 不指向文件且不以 /login/ 开头时,才会执行 rewriteRule。

    【讨论】:

    • 谢谢阿明!我在 RewriteEngine On 下添加了您的第一行,它似乎有效!对于第二个问题: !-f 是什么意思?我知道,“理解你的代码”也是一个有效的答案;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多