.htaccess - 强制https,强制子文件夹,强制www,不要破坏网站

Zan*_*ane 6 .htaccess mod-rewrite https

我一直很难编辑我的.htaccess文件来一起做这三件事.我已经能够分别得到每个部分,但我只是不明白逻辑流程如何使它们全部工作.

这是我在bluehost支持下使用演示集得到的最好的 http://helpdesk.bluehost.com/index.php/kb/article/000347

我感谢您解决此问题的任何帮助.

# Use PHP5 Single php.ini as default
AddHandler application/x-httpd-php5s .php
# Bluehost.com
# .htaccess main domain to subdirectory redirect
# Copy and paste the following code into the .htaccess file
# in the public_html folder of your hosting account
# make the changes to the file according to the instructions.
# Do not change this line.
RewriteEngine on
# Change yourdomain.com to be your main domain.
RewriteCond %{HTTP_HOST} ^(www.)?sampleurl.com$
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteCond %{REQUEST_URI} !^/folder/
# Don't change this line.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteRule ^(.*)$ /folder/$1
# Change yourdomain.com to be your main domain again.
# Change 'subdirectory' to be the directory you will use for your main domain
# followed by / then the main file for your folder, index.php, index.html, etc.
RewriteCond %{HTTP_HOST} ^(www.)?sampleurl.com$
RewriteRule ^(/)?$ folder/index.php

RewriteCond %{HTTP_HOST} ^sampleurl\.com$ [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://www.sampleurl.com/$1 [L]

# For security reasons, Option all cannot be overridden.
# Options All -Indexes
# Options ExecCGI Includes IncludesNOEXEC SymLinksIfOwnerMatch -Indexes
Run Code Online (Sandbox Code Playgroud)

更新:

好久以后使用以下我遇到了问题.

IndexIgnore *
RewriteEngine On

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule (.*) https://www.example.com/site/$1 [L,R]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} ^/site/
RewriteRule (.*) https://www.example.com/$1 [L,R]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule (.*) https://www.example.com/site/$1 [L,R]
Run Code Online (Sandbox Code Playgroud)

新问题.

  1. Bluehost有一个应用程序可以快速安装和更新wordpress,joomla,phpbb等开源应用程序.显然,我的新超级.htaccess文件完全打破了他们的系统.我可以运行更新和安装的唯一方法是将.htaccess移动到.htaccess.bak,直到升级或安装完成.然后把它移回去.

  2. 我无法在其他目录中托管的其他网站上创建任何.htaccess.例如,我有一个我存储在/ www/site /中的主帐户,该脚本会强制执行请求.不幸的是,存储在/ www/site2 /和/ www/site3 /中的其他网站效果不佳.首先,我必须创建一个空白.htaccess,以防止它拉出/ www /中找到的.htaccess.出于某种原因,如果我尝试做任何像强制www.site2.com这样的事情,我会得到500错误,说我强迫重定向太多.

我有一个理论,我的解决方案需要更具体一点,以确保它只发送到example.com的效果请求.(我认为任何不包含/ site /的行都有点广泛).

我感谢任何支持解决这个问题.会让我有点头疼!

更新II:

我不相信我有权访问apache配置.我在cpanel中看到的唯一选项是apache处理程序(不太确定该部分的作用).

我将提交一张票,以查看simplescripts服务器的运行位置.我认为它来自"https://www.simplescripts.com".您建议我添加什么编辑以忽略此域名?

我的主机bluehost启动了您的主帐户,然后是子域.主帐户的位置设置为user\www.不幸的是,当您尝试托管多个域时,这会变得混乱.这就是为什么我使用.htaccess强制将命中该目录的请求放入\ site \目录.从而将主站点捕获到\ site \目录中.

我认为我与我的一个子域名的重定位问题是由于wordpress试图强制没有www的域名然后我写了.htaccess文件强制www.这导致了无限循环,而不是我的.htaccess文件.如果我可以解决simplescripts问题,我就是gmoney;)

der*_*ert 4

我认为这样的事情会起作用

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/folder/
RewriteRule (.*) https://www.example.com/folder/$1 [L,R]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} ^/folder/
RewriteRule (.*) https://www.example.com/$1 [L,R]
Run Code Online (Sandbox Code Playgroud)

但我承认我没有测试过。如果需要,您可以添加所有“如果文件存在则不重定向”等。

如果您还没有看过,这里是mod_rewrite 文档

编辑:

回答更新的问题:

我注意到的第一件事是,您似乎对您的设置有足够的控制权,可以将重写放入 Apache 配置文件(在 VirtualHost 部分)而不是 htaccess 文件中,这将立即解决您与其他站点的问题。

第一个问题,听起来您需要添加 RewriteCond 以排除 Bluehost 软件使用的任何 URL。或者,或者在不同的 VirtualHost 下访问 Bluehost 软件(一旦您将重写内容放入 VirtualHost 块中)。

如果您无法编辑您的 Apache 配置,那么对其他站点最简单的修复就是不要将它们设为主站点的子目录(在文件系统上)。无论如何,这很奇怪。/www如果需要,也将您的主站点移动到 的子目录。

就我个人而言,我将所有站点放在/srv/www/com.site-name.www我的服务器上(即相反的顺序,顶级域在前,按字母顺序排序时,它会将相关的内容组合在一起。例如,当您有 www.example.com 和 static.example 时.com)