2017-06-17 42 views
2

我似乎遇到问题,我找不到解决方案。htaccess - 将目录重定向到具有相同名称的文件

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

dir: example.com/en-gb/

file: example.com/en-gb (extension removed with 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] 

这只是导致以下错误:

You don't have permission to access /en-gb/.html on this server.

任何想法?这甚至有可能吗?

+0

“扩展与htaccess的删除” - 这样的文件不具有扩展?据推测'en-gb.html'?重写到实际文件的指令和这些指令的顺序将非常重要 - 应将这些指令添加到您的问题中。 – MrWhite

+0

只是为了澄清,你实际上并没有用'.htaccess'去除扩展名 - 你呢? '.htaccess'用于添加扩展名(将URL转换回文件系统路径),而不是删除它。 – MrWhite

+0

是的,我以一种错误的方式表达自己。我用它来从URL中删除扩展名,但当然它仍然存在于文件后面 –

回答

1

通常,当您请求/directory时,mod_dir会发出301重定向以追加尾部斜线,即, /directory/(“修复”URL)。 mod_dir然后可以从该目录内提供目录索引文件。

不幸的是,这似乎发生之前 mod_rewrite能够处理请求。所以,你将不得不在.htaccess禁用此行为:

DirectorySlash Off 

然后,您可以在内部重写请求文件,而不是。例如。 /directory被内部被重写,以/directory.html如果它存在:

RewriteCond %{DOCUMENT_ROOT}/$1.html -f 
RewriteRule ^([^.]+)$ $1.html [L] 

但是,禁用DirectorySlash有它的警告 - 你将不得不确保对目录中的所有请求已经有尾随斜杠(或.htaccess检查这是好)。并注意文档中的安全警告。

参考:
​​

相关问题