apache - .htaccess 将对文件名 URL 的请求重写为相应的永久链接 URL

标签 apache .htaccess redirect mod-rewrite url-rewriting

我对我的 .htaccess 代码有疑问。它正在执行以下操作:

  1. 为每个 URL 添加尾部斜杠
  2. 删除 .php 文件扩展名。

这行得通,所以如果我键入 domain.com/page/,浏览器会显示 domain.com/page.php 的内容。如果我键入 domain.com/page(没有尾部斜杠),浏览器将重定向到 domain.com/page/

但是 如果我键入 domain.com/page.php 浏览器不会重定向到 domain.com/page/

有没有办法将请求domain.com/page.php重定向到domain.com/page/

这是我当前的 .htaccess 代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !(^$|\.[a-zA-Z0-9]{1,5}|/)$ %{REQUEST_URI}/ [R=301,L]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^((/?[^/]+){1,2})/$ $1.php [L]

感谢您的帮助!

最佳答案

根据您展示的示例,您能否尝试以下操作。 请确保在测试您的 URL 之前清除您的浏览器缓存。

RewriteEngine ON
##First 2 rules are added by OP itself.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !(^$|\.[a-zA-Z0-9]{1,5}|/)$ %{REQUEST_URI}/ [R=301,L]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^((/?[^/]+){1,2})/$ $1.php [L]

##Newly added rule for removing .php from browser if .php is hit in it.
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]

关于apache - .htaccess 将对文件名 URL 的请求重写为相应的永久链接 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66601572/

相关文章:

php - 本地服务器识别但在线服务器不识别的 HTTP 请求 header

php - Apache PHP 项目根处理程序/前端 Controller 模式

redirect - 我应该如何为 SAML WebSSO 配置文件实现 HTTP POST 协议(protocol)绑定(bind)?

wordpress - .htaccess 重定向过多。将除 ip 之外的所有用户重定向到网站的不同部分

php - 使用 zend 框架使用参数重定向到外部 url

java - 如何通过本地计算机远程连接 Apache 服务器 (http ://149. 4.223.238:8080)

php - 使用 echo 或 Die 进行调试和记录

apache - 多个 TLD - .htaccess 301 重定向

php - htaccess mod_rewrite

apache - 使用 .htaccess 将 example.(us|es) 重定向到子域 (us|es).example.com