我正在尝试编写一个 .htacess
文件,以便:
- 该网站运行 php 5.4
- 对domain.com的请求首先运行index.php
- 对
http://domain.com/checkout
的请求将重定向至https://domain.com/checkout
- 所有对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/