.htaccess https到http重定向与现有规则冲突

时间:2016-10-12 05:12:44

标签: apache .htaccess redirect mod-rewrite httpd.conf

目前我们在.htaccess

中有此规则
<?php
namespace SourcingBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

class RequestForEstimateType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name');
        $builder->add('details', CollectionType::class, array(
            'entry_type' => RequestForEstimateDetailType::class,
            'allow_add'     => true,
            'allow_delete' => true,
            'by_reference' => false,

        ));
        $builder->add('save', SubmitType::class, array('label' => 'Create Request'));
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'SourcingBundle\Entity\RequestForEstimate',
        ));
    }
}



<?php
namespace SourcingBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class RequestForEstimateDetailType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('quantity');  
        $builder->add('pricePerUnit'); 
        $builder->add('shippingCost'); 
        $builder->add('otherFees'); 
        // $builder->add('product'); 


    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'SourcingBundle\Entity\RequestForEstimateDetail',
        ));
    }
}

这样做对于任何访问我们将重定向到子文件夹调用站点,如果找不到页面。当发生这种情况时,网址不会将网站显示为子文件夹 例如,如果我们有 /rootFolder/site/temp.html这将在url中显示为

http://www.domain.com/temp.html

这项工作正常但现在我们需要在用户访问网站时添加https重定向。

这是我提出的新规则

RewriteEngine on <br>
RewriteCond %{REQUEST_URI} !^/site/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /site/$1
RewriteRule ^(/)?$ site/index [L]

但是这个问题现在是url会显示网站子文件夹 https://www.domain.com/site/temp.html

如果用户

,我该如何实现?

http://www.domain.com/temp.html它会在网站子文件夹中找到temp.html并重定向到https,而网址只会显示

https://www.domain.com/temp.html

由于

1 个答案:

答案 0 :(得分:1)

如果你两次通过,总是将请求的内容重定向到https,然后运行重写规则,如下所示:

RewriteCond %{HTTPS} off
#301 flag redirects instead of rewriting
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#leaving your original rules as is
RewriteCond %{REQUEST_URI} !^/site/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /site/$1
RewriteRule ^(/)?$ site/index [L]