hide.html.php结束于htaccess重写引擎



它确实有效,因为我只有.html文件。然而,现在我需要通过form.来扩展.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

而不是使用CCD_ 1。

或者,你可以试试这个:

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 ((?:^|/)[^.]+)$ $1.php [END]
# internally rewrite to .html if that exists
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ((?:^|/)[^.]+)$ $1.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 ((?:^|/)[^.]+)$ $1.php [L]
# internally rewrite to .html if that exists
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ((?:^|/)[^.]+)$ $1.html [L]

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

最新更新