我尝试了在StackOverflow上找到的几种解决方案,但是似乎都没有用。
首先,在文档根目录上,有 .htaccess文件和 index.php ,它们可以检测语言并在/fr/
目录或/en/
目录上重定向。
然后,我有了 index.html 文件和一个名为“ pages”的目录,其中所有目录都是我的页面。这样,所有网址都类似于http://example.com/fr/index.html或http://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
答案 0 :(得分:0)
隐藏“ index.html”。如果我没记错的话,这个解决方案就可以了:
RewriteEngine On RewriteRule ^index\.html$ / [R=301,L]
您说“很好”,但是,这似乎与您的网站结构不相关,因此它似乎无能为力吗?该指令假设您在文档根目录中有index.html
。但是,您是否要删除index.html
和index.php
而不管它们在URL路径中的位置如何?例如,类似:
RewriteCond %{THE_REQUEST} /index\.(html|php)
RewriteRule (.*)index\.(html|php)$ /$1 [R=301,L]
条件是防止某些服务器配置上的重定向循环。
这还要求index.php
和index.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
和.php
文件,并且没有可识别的模式,那么您需要执行文件系统检查以检查文件是否存在,然后再重写(这是相对昂贵的)。例如:
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]
在字符类中使用时,不需要反斜杠转义点(以匹配文字点),因为在字符类中使用时,它不带有特殊含义(与正则表达式中的其他地方相反)。 / p>
但是,如果有 pattern ,则可以大大改善。
- 隐藏页面目录(我不介意显示
/fr/
或/en/
目录),以便URL像这样(最后):http://example.com/fr/a
为澄清起见,您必须先链接到example.com/fr/a
。
然后将所有请求重写到/pages
子目录(并以同一动作附加.html
扩展名),您可以执行以下操作:
RewriteRule ^(fr|en)/([^/.]+)$ /$1/pages/$2.html [L]