微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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上阅读更多内容,但请务必阅读下面的部分,说明为什么在正确的地方写下“有一些很好的理由”。 还要注意安全问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐