htaccess - 将目录重定向到具有相同名称的文件

时间:2017-06-17 18:39:49

标签: .htaccess redirect mod-rewrite

我似乎遇到了一个我找不到解决方案的问题。

我有一个目录和一个同名文件设置,我似乎无法找到一种方法将目录重定向到根文件夹中的文件。我找到的所有信息都是重写或重定向到子目录中的文件。

  

dir:example.com/en-gb /

     

file:example.com/en-gb(使用htaccess删除扩展名)

目前的htaccess(相关部分):

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteRule ^$ /en-gb [L]
RewriteCond %{REQUEST_URI} ^/en-gb/$
RewriteRule . ../en-gb [R,L]

这只会导致以下错误:

  

您无权访问此服务器上的/en-gb/.html。

有什么想法吗?这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

通常,当您请求/directory时,mod_dir会发出301重定向以附加一个尾部斜杠,即。 /directory/(“修复”网址)。然后,mod_dir可以从该目录中提供目录索引文档。

不幸的是,在 mod_rewrite能够处理请求之前,这似乎会发生。因此,您必须在.htaccess中禁用此行为:

DirectorySlash Off

然后,您可以在内部将请求重写到文件中。例如。如果/directory存在,/directory.html将被内部重写为RewriteCond %{DOCUMENT_ROOT}/$1.html -f RewriteRule ^([^.]+)$ $1.html [L]

DirectorySlash

但是,禁用.htaccess有一些注意事项 - 您必须确保对目录的任何请求都有尾部斜杠(或者在p.stdin.close()中检查)。并注意文档中的安全警告。

参考:
https://httpd.apache.org/docs/current/mod/mod_dir.html#directoryslash