Apache htaccess将子目录(文件夹)重定向到同一子目录中的单个页面

Apache htaccess将子目录(文件夹)重定向到同一子目录中的单个页面,apache,.htaccess,redirect,subdirectory,Apache,.htaccess,Redirect,Subdirectory,我在.htaccess上遇到了另一个问题,似乎无法找到正确的解决方案。我试图实现的是,当您复制/粘贴下面显示的url时,从子目录重定向到同一目录中的特定html文档 例如: test/至test/page.html 我(几乎)的工作方法: Options -Indexes -MultiViews RewriteEngine on RewriteRule ^test/(.*)$ test/page.html [L] 这段代码的问题是,它基本上重定向到正确的page.html,但如果您想单击pa

我在.htaccess上遇到了另一个问题,似乎无法找到正确的解决方案。我试图实现的是,当您复制/粘贴下面显示的url时,从子目录重定向到同一目录中的特定html文档

例如: test/test/page.html

我(几乎)的工作方法:

Options -Indexes -MultiViews
RewriteEngine on

RewriteRule ^test/(.*)$ test/page.html [L]
这段代码的问题是,它基本上重定向到正确的page.html,但如果您想单击page.html上的任何链接,它只会再次重定向到page.html,而不是转到子目录/test/比方说/test/page-2.html中的特定链接

重要提示:此重定向应仅影响子目录“staging”。包括根目录在内的所有其他子目录都不会受到影响

其他信息: 此代码也位于my.htaccess文件中,用于删除目录“staging”的.html扩展名

目录“staging”未连接到任何CMS,仅由.html文件组成。 我在一个共享主机环境(Hostgator/cPanel)上


谢谢。

使用下面的规则,您只使用了L标志,但正如您所提到的,我正在为重定向修改它

Options -Indexes -MultiViews
RewriteEngine on

RewriteRule ^test/$ /staging/test/page.html [R=301,L]

您只想重定向directoy,而不想重定向其中的文件。规则中的模式表示匹配目录
test/
,后跟任何
*
,包括任何文件

要单独匹配目录,模式必须在
test
处停止,这是由字符串结尾完成的


您可以保留相对路径并添加指令,而不是绝对路径

RewriteBase /staging
RewriteRule ^test/$ test/page.html [R,L]


如果您只想重写,请省去该标志。

不幸的是,这给了我一个404页。您在哪里使用该规则!我正在子目录“test”中的.htaccess文件中使用该规则。根目录中还有另一个.htaccess。但是子目录“test”必须完全独立于根目录。您指的是什么编辑?我尝试了你的代码,它产生了一个404找不到。(链接是一个错误。)在您更新您的问题后,我已经更新了我的规则,请检查是否有效。这将生成一个404 not found。我假设发生这种情况是因为目录“test”没有index.html。我刚刚查看了其他注释,.htaccess文件位于子目录
test
?感谢您提出这个问题。.htaccess文件位于“暂存”之前的目录中。(您实际上为我提供了一个解决方案来隐藏相同设置的.html扩展名)只是想澄清一下,它是
/staging/.htaccess
还是
/staging/test/.htaccess
还是两者都有?它是
/staging/.htaccess
RewriteRule ^test/$ /staging/test/page.html [R,L]
RewriteBase /staging
RewriteRule ^test/$ test/page.html [R,L]