首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何.htaccess伪静态+隐藏扩展?

如何.htaccess伪静态+隐藏扩展?
EN

Stack Overflow用户
提问于 2020-03-22 21:01:56
回答 1查看 63关注 0票数 0

为什么我不能使用下面的代码?

代码语言:javascript
复制
RewriteRule ^(.*)$ $1.html [L]

.htaccess文件:

代码语言:javascript
复制
RewriteRule ^(.*)$ index.php [L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [L]
EN

回答 1

Stack Overflow用户

发布于 2020-03-23 02:41:28

RewriteRule ^(.*)$ index.php L RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ $1.html L

第一条规则将所有内容重写为index.php。后面的指令实际上被忽略了。

然而,第二条规则也会重写所有不会映射到现有文件或目录以附加.html扩展名的内容(相同的模式^(.*)$ -明显的冲突)。第二条规则更具限制性。

看起来你想做的是:

  1. .html扩展附加到将映射到.html的URL,所有其他请求(我假设)不会映射到URL的物理文件和目录

其他假设

root.

  • Requested文件位于document
  • 中。应映射到.htaccess文件的URL在URL-
  • 中不包含点。因此,URL-path中的圆点仅表示文件扩展名。
  • 如果您按照字面意思将其他所有内容重写为index.php (就像您所做的那样),那么它也会重写您的所有静态资源(CSS、JS、图像等),所以我假设您希望对静态资源和任何映射到文件或目录的内容进行例外处理。

请尝试执行以下操作:

代码语言:javascript
复制
RewriteEngine On

# Append the ".html" extension if the target file exists
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^([^.])$ $1.html [L]

# Rewrite other requests that don't map to files/directories to index.php
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule !\.(?:css|js|jpg|png|gif)$ index.php [L]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60799627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档