代码之家  ›  专栏  ›  技术社区  ›  fluxus

目录和文件共享相同名称时清除URL

  •  1
  • fluxus  · 技术社区  · 7 年前

    我使用这个代码段来启用干净的URL,有效地删除PHP扩展。

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    ## hide .php extension snippet
    
    # To externally redirect /dir/foo.php to /dir/foo
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
    RewriteRule ^ %1 [R,L]
    
    # To internally forward /dir/foo to /dir/foo.php
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.*?)/?$ $1.php [L]
    

    这很好,但问题是我有一些目录与一些PHP文件共享相同的名称。

    因此,我得到的不是所需的页面,而是目录结构。

    我尝试添加 DirectorySlash Off 在所有重写规则之前,但没有运气。

    我读到我必须删除 RewriteCond %{REQUEST_FILENAME} !-d 如果我正在使用 目录删除 ,这也不起作用。

    更不用说,在寻找解决方案时,我尝试了十几个不同的代码片段。

    处理我的情况的正确方法是什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   anubhava    7 年前

    更改您的。htaccess访问:

    Options +FollowSymLinks -MultiViews -Indexes
    RewriteEngine On
    RewriteBase /
    
    ## hide .php extension snippet
    
    # To externally redirect /dir/foo.php to /dir/foo
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
    RewriteRule ^ %1 [R=301,NE,L]
    
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^(.+?)/?$ $1.php [L]
    
    • 保持 DirectorySlash 出于安全原因,将其作为默认值启用。
    • Options -Indexes 用于禁用目录列表。