我在位于域名根目录的.htaccess文件中使用以下条件/规则。目的是将所有非www请求重定向到他们的www。版本:
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
似乎工作正常。
在my / blog /子目录中我有另一个.htaccess用于将花哨的URL重定向到真实的URL:
RewriteCond %{THE_REQUEST} !.*?url=.*
RewriteRule (.*) index.php?url=$1 [QSA]
这似乎也很好。 但是,/ blog /子目录中的所有非www请求都没有被重定向到他们的www。版本
例如,如果我在浏览器上键入domain.com,我会正确地重定向到www.domain.com。但是,如果我键入domain.com/blog/或domain.com/blog/test-page/,我将无法重定向到www。版本
.htaccess inside / blog /可能与根级别的.htaccess冲突,但我不知道如何或如何解决它。有线索吗?
更新:我通过将所有规则放在根.htaccess文件上来解决问题。我不得不略微调整花哨的URL规则,只捕获/ blog / ...请求。这是最终的.htaccess文件,以防它对您有所帮助:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^apprush\.com$ [NC]
RewriteRule ^(.*)$ http://www.apprush.com/$1 [R=301,L]
RewriteCond %{REQUEST_URI} ^/blog
RewriteCond %{REQUEST_URI} !.*?url=.*
RewriteRule blog/(.*) blog/index.php?url=$1 [QSA,L]
答案 0 :(得分:1)
您是否可以将所有重写规则放入根级.htaccess
?它不仅解决了您所遇到的问题,而且还有点整洁,因为您确切知道所有规则的位置。
如果您愿意,这些规则将满足您的需求:
RewriteCond ${HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
RewriteCond ${THE_REQUEST} !/blog/.*?url=.*
RewriteRule (.*) index.php?url=$1
答案 1 :(得分:0)
这是因为您在domain.com末尾有美元符号$
。您还需要使用REQUEST_URI
代替HTTP_HOST
。删除它:
RewriteCond %{REQUEST_URI} ^domain\.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
美元符号表示字符串的结尾,从而使重写适用于对domain.com的直接请求。更新脚本解决了这个问题。