我有一个域名和托管,允许我使用cPanel拥有尽可能多的子域名。
我创建了一个名为projects.test.com
的程序,我在其中上传了所有项目。
projects.test.com
指向此特定路径:public_html/projects
现在,我的主域test.com
使用301重定向指向此路径:public_html/home
实际上这个位正常,就像我输入test.com
一样,我会被重定向到test.com/home
。
现在,我已经写了一个关于如何从网址中删除/home
的问题(here),但我确实这样做了。我唯一能解决的问题是,出于某种原因添加了
RewriteEngine on
RewriteBase /
RewriteRule ^$ home/ [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?!home/).+)$ home/$1 [L,NC]
在我的根.htaccess
上,它会破坏子域projects.test.com
。
所以我的问题是,我怎样才能改变它,使其仅适用于主域而不破坏我目前拥有的这个子域以及我将来可以创建的其他域?
另外,我是否需要编辑根目录(用作public_html
文件夹,或public_html
以上的一个文件夹?
对不起,我是所有这类服务器配置的新手,我还在努力学习。
感谢您的任何建议
修改
root
中的.htaccess文件是:
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
<IfModule mod_setenvif.c>
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>
<IfModule mod_headers.c>
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>
</IfModule>
而public_html
文件夹中的那个是:
RewriteOptions inherit
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/home
RewriteRule ^/(.*)$ /home$1 [L]
RewriteCond %{HTTP_HOST} ^test\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteRule ^/?$ "http\:\/\/www\.test\.com\/home" [R=301,L]
答案 0 :(得分:2)
cPanel允许您在public_html
目录之外(或上方)放置插件或子域。由于您已经创建了子域名,请登录cPanel并单击子域名链接。在修改子域部分中,您可以编辑文档根目录。您需要这样做并将路径设置为以下内容:
domains/projects.test.com
执行此操作会将所有插件和子域组织在public_html
目录之外的单个文件夹中,并避免出现很多麻烦。下次创建插件或子域时,您将执行相同操作并将文档根设置为domains/sub.test.com
。
这些插件和子域的绝对路径与此类似(除了用户名和可能的home
目录的名称):
/home/<your_username>/domains/projects.test.com/
当然,您的主域名(与您的帐户相关联的域名)将始终指向此处:
/home/<your_username>/public_html/
解决了该问题后,如果您希望将所有请求发送到home
但不希望它显示在网址中,那么您的.htaccess
文件(在您的public_html
目录中)应如下所示:
<IfModule mod_dir.c>
DirectoryIndex index.php index.html
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
<IfModule mod_setenvif.c>
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>
<IfModule mod_headers.c>
Header append Vary User-Agent env=!dont-vary
</IfModule>
</IfModule>
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options +FollowSymLinks -MultiViews
</IfModule>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
RewriteRule .* - [L,R=405]
RewriteCond %{HTTP_HOST} ^test\.com$ [NC]
RewriteRule ^/?$ http://www.test.com [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.test\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/home/
RewriteRule ^(.*)$ /home/$1 [L]
</IfModule>
你还提到你的.htaccess
目录中有一个root
文件,我猜你的意思是:
/home/<your_username>/.htaccess
Apache(或主机运行的任何HTTP服务器)将不读取该文件。只读取public_html
目录(或其他文档根目录)中的文件。