我尝试了在StackOverflow上找到的几种解决方案,但都没有成功。
首先,在文档根目录下,我有.htaccess文件和index.php,用于检测语言并在/fr/目录或/en/目录下重定向。
然后我有index.html文件和一个名为“pages”的目录,它们都是我的页面。这样,所有的url都像http://example.com/fr/index.htmlhttp://example.com/fr/pages/a.html
我想:
隐藏“index.html”。如果我没弄错的话,这个解决方案是
好的:

RewriteEngine On
RewriteRule ^index\.html$ / [R=301,L]

隐藏html和php扩展。我用过这个,它起作用了
对php很好,但对html不好……不知道为什么。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+?)/?$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+?)/?$ $1.html [NC,L]

隐藏页面目录(我不介意/fr/或/en/目录
显示)以便URL如下所示(最后):http://example.com/fr/a
这是我的结构
├── fr
|   └── index.html
|   └── pages
|       └──a.html
|       └──b.html etc
├── en
|   └── index.html
|   └── pages
|       └──a.html
|       └──b.html etc
├── .htaccess
└── index.php

最佳答案

隐藏“index.html”。如果我没搞错的话,这个解决方案很好:

RewriteEngine On
RewriteRule ^index\.html$ / [R=301,L]

你说“很好”,但是,这似乎与你的网站结构无关,所以看起来不会有任何作用?此指令假定文档根目录中有index.html。但是,您不想删除index.htmlindex.php而不管它们在URL路径中出现在哪里吗例如,类似于:
RewriteCond %{THE_REQUEST} /index\.(html|php)
RewriteRule (.*)index\.(html|php)$ /$1 [R=301,L]

条件是防止某些服务器配置上的重定向循环。
这也要求index.phpindex.html都包含在您的DirectoryIndex.
隐藏html和php扩展。我用过这个,它对php很好,但对html没有用……不知道为什么。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+?)/?$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+?)/?$ $1.html [NC,L]

这是一场冲突。你有同样的模式-那么“赢”哪一个?第一个指令总是“赢”,第二个指令永远不会发生。
但是。。。你的“网站结构”不完整吗?您的站点结构在文档根目录中显示了一个RewriteRule文件(它被重定向到index.php)-子目录中没有/文件,所以为什么需要检查?
如果在整个站点结构中都有.php.html文件的混合,没有可辨别的模式,那么您需要执行文件系统检查,看看文件在重写之前是否存在(这是比较昂贵的)。例如:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+?)/?$ $1.php [NC,L]

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

在字符类内使用时,不需要反斜杠转义点(以匹配文字点),因为在字符类内使用时(与regex中的其他地方相反)它没有特殊意义。
但是,如果有一个模式,那么这个可以大大改进。
隐藏页面目录(我不介意是否显示.php/fr/目录),以便URL将如下所示(最后):/en/
要澄清,您必须首先链接到http://example.com/fr/a
然后,要将所有请求重写到example.com/fr/a子目录(并在同一动作中附加/pages扩展),可以执行以下操作:
RewriteRule ^(fr|en)/([^/.]+)$ /$1/pages/$2.html [L]

09-16 16:07
查看更多