php - 将特定文件夹发送到 HTTPS,并将其余文件夹从非 www 发送到 www,同时保持 Laravel 路由的其余部分正常工作?

标签 php apache .htaccess mod-rewrite laravel

我正在尝试编写一个 .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

请告诉我哪里出错了......

最佳答案

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

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

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

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

关于php - 将特定文件夹发送到 HTTPS,并将其余文件夹从非 www 发送到 www,同时保持 Laravel 路由的其余部分正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18817711/

相关文章:

php - 忽略 PHPUnit 中的 PHP 警告

php - 如何在 Laravel 中正确合并多个集合

php - 选择字段值不在数组中的所有字段

apache - cloudera 管理器 vs Apache

php - 在Android(模拟器)中连接服务器数据库

.htaccess - 重定向到尾部斜杠 (htaccess)

apache - 如何重定向和显示具有相同 url 的内容?

php - 选择Access DB文件中的全部或少数表并将其存储在sql server中

php - 关于PHP的内存使用

.htaccess - 使用 .htaccess 密码保护目录及其所有子文件夹