2

我正在尝试编写.htacess这样的文件:

  1. 该网站运行 php 5.4
  2. 对 domain.com 的请求首先运行 index.php
  3. 请求http://domain.com/checkout被重定向到https://domain.com/checkout
  4. 所有对 domain.com 的请求都被重定向到 www.domain.com

所以这是我的尝试:

    <IfModule mod_rewrite.c>
        # Use PHP 5.4
        AddType application/x-httpd-php54 .php

        Options -MultiViews
        Options +FollowSymLinks
        RewriteEngine On

        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]

        RewriteCond %{HTTP_HOST} !^www\.domain\.com
        RewriteRule ^(.*)$ http://www.domain.com/$1 [R=permanent,L]

        RewriteCond %{HTTPS} !on
        RewriteCond %{REQUEST_URI} ^(/checkout|/order)
        RewriteRule ^(.*)$ https://www.domain.com/$1 [R,L]

    </IfModule>

但是当我向domain.com/cart用户发帖时会自动重定向到domain.com/index.php

请让我知道我哪里出错了...

4

1 回答 1

2

首先,您需要了解.htaccess文件中的此类规则是按照先到先得的原则运行的。此外,您正在L为每个人使用标志。

因此,您应该确保静默映射的两个条件和规则排在index.php最后。将它们移至 https 和 www-on 规则下方。

现在,当然一个请求/cart将被映射到index.php;这就是它的编程要做的事情。但是,您说“重定向”......这是否意味着它显示index.php在地址栏中?如果是这种情况,我提到的修复应该解决这个问题(总是先检查重定向,然后进行必要的映射)。

就像@scotsninja 在评论中所说,这些事情应该由 Laravel 自己处理。您的.htaccess文件应该只用于将任何不是文件或目录的内容映射到索引文件或 Laravel 引导程序。

于 2013-09-16T05:24:42.333 回答