隐藏 .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]
第二个不会停止处理所有重写规则。
它确实有效,因为我只有 .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]
第二个不会停止处理所有重写规则。