RewriteRule htaccess始终删除尾部斜杠甚至目录

目标是结合几个规则:

在URI中永远不会有斜线

调用domain.tld / somedir时内部重写到index.PHP(domain.tld / somedir / index.PHP

删除文件扩展名 ,检查+'.PHP'是否存在,并最终在内部重写

这是在“.htaccess”中完成的,因为这是我唯一可以访问的。

我到目前为止的尝试

# check if *.PHP exists RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.PHP -f RewriteRule ^(.*[^/])/?$ $1.PHP [L,QSA] # do not allow trailing slash RewriteRule (.*)/ $1 [L,R=301]

这里的困难在于查询“domain.tld / somedir”通常在被redirect到“domain.tld / somedir /”之后调用目录的index.PHP。 不过,我想直接查询“domain.tld / somedir”时,将index.PHP内部调用(不是301)。

WAMP,Laravel 5:路由不工作 – NotFoundHttpException

.htaccess / .htpasswd 500内部服务器错误

如何用.htaccess删除部分URl?

.htaccess不工作在我的Ubuntu 14.04发行版

我怎样才能使-f标志适用于带有斜线的目录?

CodeIgniter删除index.PHP不工作

使用Apache在PHP上创build一个带有2个参数的友好URL

需要在.htaccess重写规则中转义#(哈希/磅)字符

Angular.js路由不能在WAMP上工作

拒绝所有文件,但索引/页面与htaccess

你可以使用这个代码

DirectoryIndex index.PHP RewriteEngine On # remove trailing slash RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{THE_REQUEST} s(.+?)/+[?s] RewriteRule ^(.+?)/$ /$1 [R=301,L] # To internally forward /dir/file to /dir/file.PHP RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/$1.PHP -f [NC] RewriteRule ^(.+?)/?$ /$1.PHP [L]

在Apache中有一个名为DirectorySlash的单独设置,可以启用/禁用。 您可以在httpd.apache.org/docs/2.2/mod/mod_dir.html#directoryslash上阅读更多内容,但请务必阅读下面的部分,说明为什么在正确的地方写下“有一些很好的理由”。 还要注意安全问题。

相关文章

可以认为OpenFeign是Feign的增强版,不同的是OpenFeign支持S...
为进一步规范小程序交易生态、提升用户购物体验、满足用户在...
云原生之使用Docker部署Dashdot服务器仪表盘
本文主要描述TensorFlow之回归模型的基本原理
1.漏洞描述Apache Druid 是一个集时间序列数据库、数据仓库和...
内部类(当作类中的一个普通成员变量,只不过此成员变量是cl...