【问题标题】:Apache is trying to access to files as foldersApache 正在尝试以文件夹形式访问文件
【发布时间】:2018-01-29 18:15:36
【问题描述】:

我在 Debian 中运行 Apache 2.2.22,并在站点根目录中使用此 .htaccess:文件

Options +FollowSymlinks -Indexes -MultiViews
RewriteEngine on
RewriteBase /

#Redirect without www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

#Allow access without .php extension
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

这是主要代码,我们还有一些 <FilesMatch> 指令和一些 mod_deflate 检查。

问题是,我们正在检查这个网址:

www.example.com/abc

这只是站点根目录中的abc.php 文件,因此服务器按预期重定向到example.com/abc

但是如果我访问(www.)example.com/abc/,服务器只会抛出一个HTTP 404错误,这很明显,因为目录/abc/不存在。

那些定义的选项不应该避免这种情况吗?这可能是什么问题?

【问题讨论】:

    标签: php apache .htaccess directory


    【解决方案1】:

    您需要先使用重定向规则删除尾部斜杠:

    # remove trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ /$1 [NE,R=301,L]
    
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^([^.]+)$ $1.php [L]
    

    【讨论】:

    • 不错!奇迹般有效。谢谢你。有没有什么方法可以重定向到相同的 URL 而没有斜杠?
    • 这需要额外的重定向规则。请参阅我的更新答案。
    • 太棒了。非常感谢!
    猜你喜欢
    • 2014-05-04
    • 2014-03-06
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    相关资源
    最近更新 更多