当前位置: 首页 > 知识库问答 >
问题:

. htaccess将子目录重定向到根问题

孙乐逸
2023-03-14

我的主域名绑定到我的public_html文件夹,但我使用. htaccess重定向将根目录更改为文件夹中的子目录,以便更容易托管多个网站。示例:

public_html
-- .htaccess
-- site1
---- .htaccess
-- site2
-- site3

根目录中的. htaccess文件如下:

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteCond %{REQUEST_URI} !^/subdirectory/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /subdirectory/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteRule ^(/)?$ subdirectory/ [L]

这很好,但我认为这和这个有问题。我的site1目录中的htaccess文件。如果我输入URL,它有时会重定向到示例。com/site1。因此,该网站在示例中看起来完全相同。com和示例。com/site1,但我不希望它作为示例出现。com/site1。第二个。site1目录中的htaccess文件如下所示。

RewriteEngine on

# Change default directory page
DirectoryIndex /home/

# Remove .php extension
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.+)/$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*)/$ $1.php [L]

# Ensure all directory URLs have a trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301]

# Same for HTTPS
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301]

# Redirect default error page to home page
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(/|error/)?$ /home/ [R=301,L]

# Error Documents
ErrorDocument 400 /error/?e=400
ErrorDocument 401 /error/?e=401
ErrorDocument 403 /error/?e=403
ErrorDocument 404 /error/?e=404
ErrorDocument 500 /error/?e=500

# Prevent viewing of htaccess file
<Files .htaccess>
    order allow,deny
    deny from all
</Files>

我不确定是否是我正在使用的各种重写规则的问题影响了网址,但如果能解决,我将不胜感激。

提前谢谢,如果我的描述不好,我道歉。

共有1个答案

卢毅
2023-03-14

尝试

# Ensure all directory URLs have a trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [QSA,L,R=301]

# Same for HTTPS
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,L,R=301]

它对我有用{REQUEST_URI}包含site1,所以不要使用它。QSA添加了任何URL参数,如?param1=val1

 类似资料:
  • 我有一个有趣的故事。我的根目录上的htaccess配置如下所示: 所以我真正的道路是这样的: 但是. htaccess把这个路径翻译成这样: 效果很好,但如果我打本地的话。com我想把它转发到本地。com/home。如果我打本地电话。com/随便你怎么说。 如何使用此配置执行此操作?提前谢谢。 另外,我如何强制所有内容都使用https?

  • 问题内容: 这个问题可能已经问了上千遍了,但是我尝试了很多脚本,并且在搜索什么都没有找到时搜索了很长时间,我想,我们只是问一下。 我只是想重定向到而用户看不到URL更改。 因此,如果有要求,我希望用户继续看到该URL,而给定的页面实际上是。 注意:我不想要,所以简单 提前致谢, 以赛亚诉匈奴 问题答案: 我在下面设置了我的子域的CNAME: 到我的WordPress安装在根目录下的文件夹中。 以前

  • 嘿,在StackOverflow社区,我在StackOverflow上搜索了很多,以修复我的“太多重定向”错误。但找不到任何有用的东西。我想通过.htaccess和UserAgent条件重定向到移动目录。找到了一个高票数的解决方案,如下所示:

  • 基本上,我在public_html目录(Apache服务器)的根目录中有一些子目录,我在那里保存我的主要网站(http://www.jamesandersonjr.com)。主网站文件直接位于public_html根目录中,而其他网站(有自己单独的域)则位于根目录下的子文件夹/子目录中。 我遇到的问题是,我的. htaccess文件(在public_html的根目录中)中的一些规则正在级联,以影响

  • 我已经找了好几个小时了,我不知道该怎么做。我需要进行以下301永久重定向: 当人们来访时http://web.domain.com.br/something/ 它们应该被重定向到http://domain.com.br/something/ 哪里(重要!),/something/不是真正的目录,它是wordpress multisite安装中的一个子博客。根上还有其他规则。htaccess文件已在

  • 请不要向我推荐超过173票的长而详细的帖子。这对我不起作用。我也试过很多其他的(1,2,3,4)。他们都给我太多的重定向或错误500。因此,我的问题是: 用我的电流。htaccess,这就是发生的情况: https://www.dukescasino.com/-工作完美 https://dukescasino.com/-重定向到上面的内容,这很好 下面的两个选项加载罚款,但它应该重定向到https