【发布时间】:2014-06-15 12:37:18
【问题描述】:
我正在尝试编写一个条件,将在实时主机名 (domain.com) 上强制使用 https,但如果它在我们的本地测试主机名 (domain.local) 上则不会。
这是我所拥有的:
#force https
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !domain\.local [NC]
RewriteRule ^(.*?)$ https://www.domain.com/$1 [L,R=301]
此条件重写为 https,但也将 domain.local 重定向到 domain.com
我也尝试过这个条件来代替在 .local 或 .com 上没有任何作用的中间条件:
RewriteCond %{HTTP_HOST} ^domain\.com [NC]
这是我的 htaccess 文件的完整内容
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
#force ssl
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^domain\.com
RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L,NE]
#rewrite payments subdomain
RewriteCond %{HTTP_HOST} ^payments\.domain\.local$ [NC]
RewriteRule ^(.*)$ https://otherdomain.com/dmi_domain.htm [NC,R=301,L]
RewriteCond %{HTTP_HOST} ^payments\.domain\.com$ [NC]
RewriteRule ^(.*)$ https://otherdomain.com/loanadmin/dmi_domain.htm [NC,R=301,L]
#agents folder to subdomain
RewriteCond %{HTTP_HOST} ^agents\.domain\.local$ [NC]
RewriteRule ^agents/(.*)$ /agents/$1 [L,P]
RewriteCond %{HTTP_HOST} ^agents\.domain\.com$ [NC]
RewriteRule ^agents/(.*)$ /agents/$1 [L,P]
#force www for .com
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^payments\. [NC]
RewriteCond %{HTTP_HOST} !^agents\. [NC]
RewriteCond %{HTTP_HOST} !^domain\.local
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_URI} !^/questions/
RewriteRule ^(.*?)$ https://www.%{HTTP_HOST}/$1 [L,R=301]
#force www for .local
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^payments\. [NC]
RewriteCond %{HTTP_HOST} !^agents\. [NC]
RewriteCond %{HTTP_HOST} !^domain\.com
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_URI} !^/questions/
RewriteRule ^(.*?)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
#force trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_URI} !^/rate-panel/xml/
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_URI} !^/questions/
RewriteRule ^(.*)$ $1/ [L,R=301]
#get rid of index.php in url
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_URI} !^/questions/
RewriteRule ^(.*)$ /index.php/$1 [L]
谢谢
【问题讨论】:
标签: regex apache .htaccess mod-rewrite https