隐藏 .html .php 结束于 htaccess RewriteEngine

hide .html .php ending over htaccess RewriteEngine

它确实有效,因为我只有 .html 个文件。但是,现在我需要通过表格扩展 .php。

我试图复制 .htaccess 规则,但 htaccess 只采用第一条规则。

我的尝试:

RewriteEngine on
RewriteRule ^([^.?]+)$ %{REQUEST_URI}.html [L]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.html[? ].*$"
RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$"
RewriteRule .* - [L,R=404]

有没有一种方法可以隐藏 .php 以及 .html 结尾在同一个规则中,并且有效?

尝试添加:

Options +MultiViews

而不是使用 mod_rewrite

或者,您可以试试这个:

RewriteEngine On

# return 404 if .html or .php is found at the end
RewriteRule \.(?:php|html)$ - [R=404,L]

# internally rewrite to .php if that exists
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ((?:^|\/)[^\.]+)$ .php [END]

# internally rewrite to .html if that exists
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ((?:^|\/)[^\.]+)$ .html [END]

请记住,[END] 停止在该规则之后处理所有 mod_rewrite 规则,因此停止将重写的 url 重写为 404 的递归。

或者你可以试试:

RewriteEngine On

RewriteCond %{THE_REQUEST} .*\.(?:php|html)[\s\?]{1}
RewriteRule ^ - [R=404,L]

# internally rewrite to .php if that exists
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ((?:^|\/)[^\.]+)$ .php [L]

# internally rewrite to .html if that exists
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ((?:^|\/)[^\.]+)$ .html [L]

第二个不会停止处理所有重写规则。