.htaccess,隐藏子目录

时间:2017-12-07 22:10:28

标签: .htaccess mod-rewrite

我是新手,了解.htaccess是如何运作的,而我正在努力让它按照我想要的方式工作。

这是我当前的.htaccess文件:

RewriteOptions inherit

#ErrorDocument 404 https://tsrvtc.com/_pages/404page.html
#ErrorDocument 500 https://tsrvtc.com/_pages/500page.html
#ErrorDocument 403 https://tsrvtc.com/_pages/403page.html

<IfModule mod_rewrite.c>
RewriteBase /
RewriteEngine on

RedirectMatch 301 ^/?$ https://www.tsrvtc.com/index

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+_pages/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^_pages/)^(.*)$ /_pages/$1 [L,NC]
#
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+vtc_manager/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^vtc_manager/)^(.*)$ /vtc_manager/$1 [L,NC]

RewriteCond %{HTTP_HOST} ^tsrvtc\.com$ [NC]
RewriteRule ^(.*)$ http://www.tsrvtc.com/$1 [R=301,L]

</IfModule>
AuthName "public"
AuthUserFile "/home/tsrvtcco/.htpasswds/public_html/passwd"

它目前隐藏了URL中的_pages目录,但是当我尝试隐藏vtc_managerm目录时,然后转到该目录中的页面,它重定向到我的域名并将index.php放在最后。我收到了这个错误:https://gyazo.com/0cc504188657beafd2042d6332e4bd9b

以下是目录的布局:

public_html 
  _pages
  vtc_manager

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

错误配置.htaccess导致的错误。当您尝试深入研究时,apache日志会显示以下错误:

  

由于可能,请求超出了10个内部重定向的限制   配置错误。使用&#39; LimitInternalRecursion&#39;增加   必要时限制。使用&#39; LogLevel debug&#39;获得回溯。

根据这些条件和规则,您正在进行无限重定向:

1. RewriteCond %{REQUEST_FILENAME} !-f
2. RewriteRule (?!^_pages/)^(.*)$ /_pages/$1 [L,NC]

3. RewriteCond %{REQUEST_FILENAME} !-f
4. RewriteRule (?!^vtc_manager/)^(.*)$ /vtc_manager/$1 [L,NC]

当您发出请求/并且在根目录中找不到文件时,则第一个条件(1.)符合并且规则符合。请求uri被重写为/_pages/。处理重写的请求,然后再次将其传递回URL解析引擎。第二次尝试,第一个条件(1.)满足,但规则模式(2.)不符合。但是,第二个条件(3.)符合,规则(4.)符合。然后将请求uri重写为/vtc_manager/_pages/。然后处理重写请求等等。

您应该完整阅读mod_rewrite moduleRewriteRule Flags的文档,以了解您的目标。