.htaccess - 从 URL 请求中删除 .php 文件扩展名
问题描述
我正在尝试美化我的 URL,并希望摆脱 .php 文件扩展名。我在这里发现了其他几个问题,例如这个(删除 PHP 文件类型扩展名)但是没有一个建议对我有用。他们将我发送到我的 404.php 或根本不更改 URL。
我认为我的 htaccess 中的整个 RewriteEngine 代码本身就存在冲突。
这是我到目前为止得到的,
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteRule ^index\.php$ - [R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /404.php [R]
</IfModule>
我希望我的域名看起来像
解决方案
不要在同一个 .htaccess 中混合Redirect
,RedirectMatch
和RewriteRule
指令,因为它们来自不同的 Apache 模块,并且它们的加载顺序是不可预测的。
有这种方式:
ErrorDocument 404 /404.php
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [L,R=301,NE]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
确保在测试此更改之前清除浏览器缓存。
推荐阅读
- html - 是否可以让我的列式 div 框响应使用 css 的小型设备?或者我可以使用引导程序吗?
- angular - 错误:- StaticInjectorError(AppModule) - ngx-bootstrap-product-tour
- javascript - 为什么我的 SVG 图像在 chrome 上完美显示,但是当我在 iPhone 上打开它时,它根本不显示?
- jquery - Chrome 扩展:$.ajax 不是函数
- css - 使用宽度过渡时如何防止 Chrome 闪烁?
- javascript - Chrome 扩展:webNavigation 同时限制权限范围
- r - 在 R 中绘制分类变量 OLS
- java - Android java xml到json很长
- c# - 如何在 C# 中的表单加载时使用结构填充列表
- sql - Laravel 简单的私人对话结构