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

Apache 使用.htaccess将所有.php请求重定向到.html,apache,.htaccess,redirect,mod-rewrite,url-rewriting,Apache,.htaccess,Redirect,Mod Rewrite,Url Rewriting,下面的代码用于隐藏.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/l

下面的代码用于隐藏.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
”,它也应该重定向/重写到“
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
格式。我相信你应该避免给用户提供这两种url,并要求他们只点击.html url,以防有人点击
.php
url,你可以禁止它(如果他们直接点击它,另一个原因可能是,如果他们直接点击
.php
,那么您希望它将浏览器上的URL更改为.html,这实际上是由后端的
.php
文件本身提供的),如果它们命中.html,则可以由传递的uri IMHO的各自index.php提供。注意:这只是IMHO,如果有人对此有更多要求,则不应使用

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/$1.html [L,R]
#rewrite /user/foobar.html to /user/foobar/index.php
RewriteRule ^user/([^.]+)\.html$ /user/$1/index.php [L]

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

您混淆了“重写”和“重定向”:-)如果您想隐藏某些内容,则需要重写。正则表达式末尾的
应该是可选的I gues?@Daniel W,我想要的是将到原始脚本位置的请求重定向到假URL(这里是php到html)。你所说的“重定向”到底是什么意思?您尝试了哪些方法来实现这一点?是否存在扩展名为
.html
的相同文件?请通过编辑对您的问题进行所有澄清-同时,解释如果有人请求“隐藏”URL,应该如何处理-该请求是否应转发到公共URL,是否应显示错误消息?注释不用于扩展讨论;此对话已被删除。@SamuelLiew我可以知道为什么此答案上的所有评论都被删除了吗?