我的应用程序托管在heroku上,我正在使用Cakephp API。我希望它重定向到https://www。并执行www。子域。
并且,他们有两个域指向同一个应用程序。
我在/app/.htaccess
中有以下代码RewriteEngine on
RewriteBase /
#apply if no https
RewriteCond %{HTTPS} off
#Ignore when is local env or any staging env
RewriteCond %{HTTP_HOST} !^local(.*) [NC]
RewriteCond %{HTTP_HOST} !^(.*)heroku(.*) [NC]
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
#apply if https
RewriteCond %{HTTPS} on
#Ignore when is local env or any staging env or subdoamin is www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^local(.*) [NC]
RewriteCond %{HTTP_HOST} !^(.*)heroku(.*) [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
#default from cakephp
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
我在/app/webroot/.htaccess
中有以下代码RewriteEngine On
RewriteBase /
#redirect any request from .poa.br to .com.br
RewriteCond %{HTTP_HOST} ^(.*)example\.poa\.br$ [NC]
RewriteRule ^(.*)$ https://www.example.com.br/$1 [NE,R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
但它不起作用。只需将以下请求重定向到https://www.example.com.br:
https://www.example.com.br
https://www.example.poa.br
http://www.example.poa.br
此选项转到域,但没有https前缀。
http://www.example.com.br
其他选项不起作用(返回DNS_PROBE_FINISHED_NXDOMAIN):
https://example.com.br
http://example.com.br
https://example.poa.br
http://example.poa.br
答案 0 :(得分:1)
在cakephp3中,我为此苦苦挣扎。我的解决方案是从
更改第一个.htaccess文件User
到
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
请注意302,我苦苦挣扎的原因是.htaccess被缓存并使得测试非常困难,我什至甚至删除了webroot中index.php中的所有cakephp代码,然后回显了“ test”一旦工作,我将302更改为301,以便.htaccess可以在浏览器中硬缓存。 (要测试index.php文件中是否存在HTTP:X-Forwarded-Proto之类的值var_dump($ _ SERVER))
如果您在没有HTTP:X-Forwarded-Proto的服务器上
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
答案 1 :(得分:0)
Hello确保在此工作之前打开重写模块。
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yourwebsite.com/$1 [R,L]
并在您的基本网址中,您需要添加(。)到http。
我希望这会对你有所帮助。
您还可以添加'www'
只需添加此
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
答案 2 :(得分:0)
我们无法使用.htaccess将域重定向到Heroku中的www.domain。我们需要使用Heroku命令配置它。参见文章:
https://github.com/Helabs/pah/wiki/Configuring-domain-on-Heroku
https://devcenter.heroku.com/articles/custom-domains#add-a-custom-root-domain
我正在寻找如何强制使用https。
答案 3 :(得分:0)
在你的cakephp项目文件夹中更改你的htaccess文件:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
RewriteCond %{QUERY_STRING} ^(.*)http(\:|\%3A)(.*)$
ReWriteRule .* - [F]
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
请注意,您的服务器(或您的虚拟主机)会侦听端口443(对于https)
<VirtualHost *:80>
ServerAdmin subdomain@example.br
ServerName subdomain.example.br
ServerAlias subdomain.example.br
DocumentRoot /var/www/subdomain
<Directory /var/www/subdomain/>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
ServerSignature Off
ErrorLog /var/log/apache2/error.log
</VirtualHost>
<VirtualHost *:443>
ServerAdmin subdomain@example.br
ServerName subdomain.example.br
ServerAlias subdomain.example.br
DocumentRoot /var/www/subdomain
<Directory /var/www/subdomain/>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /[path to your CRT file]
SSLCertificateKeyFile /[path to your PEM file]
SSLCertificateChainFile [path to your CRT file]
SSLCACertificatePath /etc/ssl/certs/
SSLCACertificateFile /[path to your CRT file]
ErrorLog /var/log/apache2/error.log
</VirtualHost>
答案 4 :(得分:0)
我在/app/webroot/.htaccess
中进行了所有配置有一个技巧可以确定对Heroku的请求是否为https。
按照代码:
RewriteEngine On
RewriteBase /
#Identify if it is https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
#ignore local env
RewriteCond %{HTTP_HOST} !^local(.*) [NC]
#apply redirect in all subdomain
RewriteCond %{HTTP_HOST} ^(.*)example\.com\.br$ [NC]
RewriteRule ^(.*)$ https://example.com.br/$1 [NE,R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
我们决定将所有请求重定向到裸域,但如果您想更改为www,则可以执行以下命令。
RewriteRule ^(.*)$ https://www.example.com.br/$1 [NE,R=301,L]
由于