目标是结合几个规则:
在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标志适用于带有斜线的目录?
使用Apache在PHP上创build一个带有2个参数的友好URL
需要在.htaccess重写规则中转义#(哈希/磅)字符
Angular.js路由不能在WAMP上工作
你可以使用这个代码:
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 举报,一经查实,本站将立刻删除。