使用 .htaccess 将所有 .php 请求重定向到 .html

Redirect all .php requests to .html using .htaccess

以下代码用于隐藏 .php 并将其替换为 .html

RewriteEngine ON
RewriteCond %{REQUEST_URI} ^/([^/]*)/([^.]*)\.html/?$ [NC]
RewriteRule ^(.*)$ %1/%2/index.php [L]

我想将所有 .php 请求重定向到 .html。 所有 .php 文件都在“https://www.sitename.com/user/”的子目录中。 例如

https://www.sitename.com/user/login/index.php
https://www.sitename.com/user/name/index.php
https://www.sitename.com/user/register/index.php
https://www.sitename.com/user/logout/index.php
https://www.sitename.com/user/dashboard/index.php
https://www.sitename.com/user/contact/index.php

它应该重定向到

https://www.sitename.com/user/login.html
https://www.sitename.com/user/name.html
https://www.sitename.com/user/register.html
https://www.sitename.com/user/logout.html
https://www.sitename.com/user/dashboard.html
https://www.sitename.com/user/contact.html

为每个文件夹添加单独的 .htaccess 代码行会很困难,有人可以用简单的代码帮助自动检测和重定向 .php 到 .html 吗?

说明: 如果有人尝试访问“sitename.com/user/login/index.php”,它应该加载“sitename.com/user/login.html”。

sitename.com/user/login.html 应该是唯一对用户可见的 URL。即使有人试图访问“sitename.com/user/login/index.php”,它也应该redirect/rewrite到“sitename.com/user/login.html”。 在浏览器中输入 sitename.com/user/login.html = sitename.com/user/login.html 在浏览器中输入sitename.com/user/login/index.php=sitename.com/user/login.html

根据您展示的示例,请您尝试以下操作。请确保在验证 URL 之前清除浏览器缓存。根据 OP 的评论编辑规则,按照 .php.html 格式。我相信你应该避免向用户提供这两种 urls 并要求他们只点击 .html urls 以防有人点击 .php url 你可以禁止它(如果他们直接点击它,另一个原因可能是因为如果他们直接点击 .php 那么你希望它在浏览器上将 URL 更改为 .html 这实际上是由后端的 .php 文件本身提供服务),如果它们命中 .html 则可以由传递的 uri 恕我直言的相应 index.php 提供服务。注意:这只是恕我直言,如果有人对此有更多要求,则不应使用。

RewriteEngine ON
RewriteCond %{REQUEST_URI} ^/user/([\w-]+)\.html/?$ [NC]
RewriteRule ^(.*)$ user/%1/index.php [L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} index\.php/?$ [NC]
RewriteRule ^ - [F]

您可以使用以下规则将您的 php URL 转换为 html :

RewriteEngine on

#Redirect and rewrite php URLs to html
#redirect /user/foobar/index.php to /user/foobar.html
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^user/([^/]+)/index\.php$ /user/.html [L,R]
#rewrite /user/foobar.html to /user/foobar/index.php
RewriteRule ^user/([^.]+)\.html$ /user//index.php [L]

规则 #1) 在请求 /user/foobar/index.php 时触发并将其重定向到 /user/foobar.html 。由于 .html 文件不存在,第二条规则将 .html 请求映射回原始 .php 页面,但您的 URL 在浏览器地址栏中保持不变。