首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >.htaccess重写子文件夹

.htaccess重写子文件夹
EN

Stack Overflow用户
提问于 2012-12-27 00:12:37
回答 1查看 27.4K关注 0票数 6

目标:

在共享Apache2.2框上的虚拟服务器中,我尝试将.htaccess配置为无缝地表示public_html文件夹的子文件夹中的文件,就像它们在根目录中一样。

也就是说,当用户访问http://www.example.com/home时,我需要他或她无缝地(而不是在客户端浏览器中重写URL )查看来自http://www.example.com/subfolder/home的文件。

我的.htaccess文件如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RewriteEngine on
RewriteRule !^subfolder/ subfolder%{REQUEST_URI}

问题:

这是可行的,但它会在客户端浏览器中重写URL。

也就是说,用户在地址栏中看到http://www.example.com/subfolder/home/,但我需要他们只看到http://www.example.com/home

我的理解是,我在.htaccess中所做的工作应该会导致“内部”重写,这对于最终用户来说是不可见的,但是看起来我得到了一个“外部”重写。

我做错了什么?

编辑其他详细信息:

当用户访问www.example.com时,它确实可以按需要工作,因为用户可以看到public_html/subfolder/default.html提供的主页内容,浏览器地址栏显示的是www.example.com

但是,当用户单击主页上的“Contact”链接(编码的href="/contact")时,它会到达那里,但在浏览器地址栏中显示www.example.com/subfolder/contact/,就好像它已经完成了重定向而不是内部重写。

如果我然后删除地址栏中的/subfolder文本并强制重新加载页面,它就能工作--它加载正确的内容,地址栏仍然是www.example.com/contact/

实现注意:如果有帮助,public_html/subfolder/contact是一个包含default.html文件的文件夹。

另一个观察:

如果我打开一个新的选项卡并键入www.example.com/contact/ (注意后面的斜杠),它将按预期和期望的方式工作。

但是,如果我打开一个新的选项卡并键入www.example.com/contact (没有尾随斜杠),它就会重定向到www.example.com/subfolder/contact/,这正是我不想要的。

我觉得这应该告诉我出了什么问题,但我仍然没有得到答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-27 13:10:01

之所以会发生这种情况,是因为mod_dir。它有一个名为DirectorySlash的指令,当它认为对一个目录提出了请求,并且后面的斜杠丢失到一个后缀斜杠的URI时,就会重定向浏览器。问题是mod_dir和mod_rewrite在URL/文件映射管道中的不同位置得到应用。因此,mod_rewrite一度破坏了URI,然后当mod_dir完成任务时,重写的URI被重定向,因此浏览器地址栏中的URL更改为包含“隐藏的”内部重写。

你可以在这里做几件事。

  1. 您可以在mod_rewrite中自己强制使用尾随斜杠,因此浏览器会被重定向,以便在URI到达mod_dir之前包含尾随斜杠。这意味着/home/contact之类的所有URL都将包含一个尾斜杠,如果缺少一个斜杠,则重写代码将重定向并添加一个。如下所示,超出了当前的规则,以便首先应用该规则: RewriteCond %{REQUEST_URI}!^/子文件夹RewriteCond %{DOCUMENT_ROOT}/subfolder%{REQUEST_URI} !-f RewriteRule ^(.*^/)$ /$1/ L,R=301
  2. 关闭DirectorySlash,以便mod_dir停止重定向。只需将DirectorySlash Off包含在htaccess文件的顶部即可。然而,这里的缺点是,当后面的斜杠丢失时,a possible information disclosure security issue就会出现。

编辑:

为了使用索引文件,没有尾随斜杠,您需要映射到它。尝试将您的规则更改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/subfolder
    RewriteCond %{DOCUMENT_ROOT}/subfolder%{REQUEST_URI} -d
    RewriteRule ^(.*?)/?$ /subfolder/$1/ [L]

    RewriteCond %{REQUEST_URI} !^/subfolder
    RewriteRule ^(.*)$ /subfolder/$1 [L]
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14051466

复制
相关文章
.htaccess的重写规则
.htaccess是Apache服务器的一个非常强大的分布式配置文件。 正确的理解和使用.htaccess文件,可以帮助我们优化自己的服务器或者虚拟主机。
Java架构师必看
2021/03/22
1.9K0
通过.htaccess 让WordPress 的上传文件夹更安全
WordPress本身的架构就很安全,但是我们可以做一些优化,让WordPress 更安全。WordPress的图片等文件的上传路径默认是wp-content/uploads/ ,为了防止被别有用心的人通过这个上传文件夹上传一些文件非法获取权限,我们可以用.htaccess文件让你的wordpress的上传文件夹更安全。 创建一个文件并命名为.htaccess, 并写下面的代码: <Files ~ ".*..*"> Order Allow,Deny Deny from all </Files
Jeff
2018/01/19
1.2K0
.htaccess重写让空间绑定多个域名到不同的目录支持多站点
购买了一个美国主机,想要在同一个空间上绑定多个域名,建立多个网站,这是很正常不过的事情。但是如果你购买了一个便宜货的美国空间,那么想要在同一个空间上绑定多个域名支持多站点就难了。 这样说可能还是有人不太明白。最近有人问我如果在Godaddy上绑定多个域名建立多个网站,按理说应该是直接在后台绑定多个域名,然后主机就会自动建立多个目录,这样不同的目录对应不同的域名访问了。 但是那个朋友说自己在Godaddy后台绑定了多个域名,然后访问的却是同一个网站,不能够支持多个站点。我查看了这个朋友的主机,原来是购买了我在
用户1272546
2018/06/04
7.2K0
java实现文件夹(包括其中的子文件夹、子文件)的复制——递归
这是学校java课的一道实验题,题目如下:编程,根据指定的源和目标位置,完成指定文件或文件夹(包括其中的子文件夹、子文件)的复制。 以下是我的实现,使用了递归: 1 package com.simon.myfinal; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.InputStream; 7 8 /** 9
用户1737026
2018/05/17
2.6K0
.htaccess重写让空间绑定多个域名到不同的目录支持多站点
购买了一个美国主机,想要在同一个空间上绑定多个域名,建立多个网站,这是很正常不过的事情。但是如果你购买了一个便宜货的美国空间,那么想要在同一个空间上绑定多个域名支持多站点就难了。
用户1191760
2019/02/27
6.7K0
ThinkPHP5.1中URL重写.htaccess更改后无效的解决方法
昨天是打算更换项目框架的,决定了这个 ThinkPHP5,我使用的是 5.1 版本 开发中一直不喜欢 URL 中有这个index.php,这个时候就要使用.htaccess 来进行 URL 重写,之前有文章大概介绍了一下简单配置.htaccess 就可以实现的几个功能以及.htaccess 文件使用手册,框架都会通过 URL 重写隐藏应用的入口文件index.php,ThinkPHP 框架和 Laravel 框架的入口文件路径一样,都是在public下面 本地开发使用的是 Apache 环境,所以按照官方文
沈唁
2018/05/24
10.9K1
1233. 删除子文件夹
首先通过字典比较的方式对folder进行排序。由此可知,只有每两个相邻的字符串之间存在子目录情况。因此,folder[i]与folder[i-1]之间满足在值前缀相等并且folder[i-1]的folder[i].length()下标的值为' / '的前提下,那么folder[i-1]为folder[i]的子目录。
小炜同学
2023/02/23
7110
1233. 删除子文件夹
htaccess设置
Options +FollowSymLinks -Indexes RewriteEngine On RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] <I
OwenZhang
2021/12/08
7690
WordPress自动在uploads文件夹内创建子文件夹
在开发主题或者插件的时候,经常要创建一个自定义的文件夹,我经常使用的一种方法就是在插件或主题安装的时候,先让程序自动到某个文件夹下先检测这个文件夹是否存在,如果不存在就自动创建一个文件夹。 下面的代码演示了如何在uploads文件夹中自动地创建一个自定义文件夹: function myplugin_activate() { $upload = wp_upload_dir(); $upload_dir = $upload['basedir']; $upload_dir = $upload_dir . '/my
Jeff
2018/01/19
1.7K0
LeetCode 1233. 删除子文件夹
你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。
Michael阿明
2020/07/13
7340
LeetCode 1233. 删除子文件夹
由浅入深剖析.htaccess
.htaccess的主要作用就是实现url改写,也就是当浏览器通过url访问到服务器某个文件夹时,作为主人,我们可以来接待这个url,具体地怎样接待它,就是此文件的作用。所有的访问都是通过URL实现,所以.htaccess的作用非同小可。正因为此,所以一般地网站通过设置.htaccess,通过一个十分友好的url吸引用户进来,然后用.htaccess把用户带到需要访问的位置。
Java架构师必看
2021/03/22
5K0
cmd命令 拷贝某文件夹及其子文件夹文件到其它文件夹
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115956.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
2K0
ExcelVBA文件操作-获得文件夹中的所有子文件夹
ExcelVBA文件操作-获得文件夹中的所有子文件夹 图片 上一期,学习了 今天我们来学习如果取得文件夹中的子文件夹路径 如图 图片 在我们可以先用上一节选择取得【test目录】 再读取【1目录、2目录、3目录】再读取…… 上一期的程序 Sub FileDialog_sample1() With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = ThisWorkbook.Path .Title = "选择文件夹" I
哆哆Excel
2023/03/07
3.1K0
ExcelVBA文件操作-获得文件夹中的所有子文件夹
ExcelVBA文件操作-获得文件夹中的所有子文件夹
-----------------近期学习笔记----------------------
哆哆Excel
2023/09/09
6170
ExcelVBA文件操作-获得文件夹中的所有子文件夹
cmd批量删除子文件夹特定文件
方法: 1)cmd命令提示行中切换到需要批量删除文件的顶层目录(切换方法见相关博文) 2)输入del /S *.exe 可以删除指定目录下所有子文件夹中的exe文件del /S *.dat 可以删除制定目录下所有子文件夹中的dat文件 具体如下图所示图片 相关说明: 删除一个或数个文件。 DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names names  指定
信和网站维护中心
2022/07/13
4.7K0
htaccess文件使用
拒绝来自某个IP的访问 如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。 例如: order allow,deny deny from 210.10.56.32 deny from 219.5.45. allow from all 第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255 想要拒绝所有人?用deny from all好了。不止用IP,也可以用域名来设定。 保护.htac
wangxl
2018/03/07
1.2K0
ExcelVBA文件操作-选择文件夹(含子文件夹)获取所有文件列表
1.ExcelVBA-打开对话框取得文件夹路径2种方法 2.ExcelVBA文件操作-获得文件夹中的所有子文件夹
哆哆Excel
2023/05/07
5K0
ExcelVBA文件操作-选择文件夹(含子文件夹)获取所有文件列表
DOS批处理 - CMD命令(复制、移动、重命名) (文件夹、子文件夹)
1、文件夹A里有很多子文件夹,这些文件夹里有很多不同格式的文件,我想把这些所有子文件夹里的文件全部提取(剪切)出来,放到A文件夹里面,那些子文件夹里就没有东西了。
浩Coding
2019/07/02
10.3K0
DOS批处理 - CMD命令(复制、移动、重命名) (文件夹、子文件夹)
使用Python批量实现文件夹及其子文件夹下指定文件的复制
前几天在帮助粉丝解决问题的时候,遇到一个简单的小需求,这里拿出来跟大家一起分享,后面再次遇到的时候,可以从这里得到灵感。
Python进阶者
2023/03/02
2K0
使用Python批量实现文件夹及其子文件夹下指定文件的复制
点击加载更多

相似问题

htaccess重写子文件夹

11

htaccess重写子文件夹?

12

重写到子文件夹htaccess

12

Htaccess重写规则子文件夹

10

htaccess RewriteRule重写子文件夹

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文