我一直很难编辑我的.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
更新
经过很长一段时间使用以下内容后,我遇到了问题。
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]
新问题。
Bluehost有一个应用程序可以快速安装和更新wordpress,joomla,phpbb等开源应用程序。显然,我的新超级.htaccess文件完全破坏了他们的系统。我可以运行更新和安装的唯一方法是将.htaccess移动到.htaccess.bak,直到升级或安装完成。然后将其移回。
我无法在其他目录中托管的其他网站上创建任何.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;)
答案 0 :(得分: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]
但我承认我没有测试过。如果你想要的话,你可以添加所有不重定向的文件等等。
如果你还没有看到它,这里是mod_rewrite documentation。
回应更新的问题:
我注意到的第一件事是你似乎可以对你的设置有足够的控制权来将重写放在Apache配置文件中(在VirtualHost部分中)而不是在htaccess文件中,这将立即解决你的问题其他网站。
第一个问题,听起来你需要添加RewriteCond来排除Bluehost软件使用的任何网址。要么是这样,要么在不同的VirtualHost下访问Bluehost软件(一旦你将重写内容放入VirtualHost块中)。
如果您无法编辑Apache配置,那么对于其他站点来说,最简单的修复就是不要使它们成为主站点的子目录(在文件系统上)。无论如何,这很奇怪。如果需要,也可以将主站点移动到/www
的子目录。
就我个人而言,我将/srv/www/com.site-name.www
中的所有网站放在我的服务器上(即相反的顺序,首先是顶级域名,它按字母顺序排序时将相关的东西组合在一起。例如,当你有www时.example.com和static.example.com)
答案 1 :(得分:0)
这似乎做了我需要的一切。可能是一个更短的方式来完成这个,但它的工作原理! IndexIgnore * RewriteEngine On
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]
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_URI} !^/folder/
RewriteRule (.*) https://www.example.com/folder/$1 [L,R]