【问题标题】:htaccess redirect when directory exists [duplicate]目录存在时的htaccess重定向[重复]
【发布时间】:2016-04-25 08:55:31
【问题描述】:

为了制作友好的 URL,以下是应用的 htaccess 代码:

RewriteEngine On

RewriteCond %{THE_REQUEST} /.+?\.php[\s?] [NC]
RewriteRule ^ - [F]

RewriteRule    ^([^/\.]+)$    index.php?id1=$1    [NC,L,QSA]  
RewriteRule    ^([^/\.]+)/([^/\.]+)$    index.php?id1=$1&id2=$2    [NC,L,QSA] 

现在适用于:

  1. mydomain.com/pagesmydomain.com/index.php?id1=pages

  2. mydomain.com/pages/xyzmydomain.com/index.php?id1=pages&id2=xyz

另外,当我在 URL 中手动输入 mydomain.com/index.php?id1=pages&id2=xyz 时,它会重定向到 mydomain.com

现在,当我输入另一个类似 mydomain.com/templates 的模板是一个存在的目录时,它会重定向到 mydomain.com/templates/?id1=templates

编辑 1:

我尝试添加此行但徒劳无功:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

我应该如何使用 htaccess 避免这种情况(当存在具有该名称的目录时)?

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:
    RewriteEngine On
    
    RewriteCond %{THE_REQUEST} /.+?\.php[\s?] [NC]
    RewriteRule ^ - [F]
    #serve dirs without rewriting
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]    
    #####
    RewriteRule    ^([^/\.]+)$    index.php?id1=$1    [NC,L,QSA]  
    RewriteRule    ^([^/\.]+)/([^/\.]+)$    index.php?id1=$1&id2=$2    [NC,L,QSA] 
    

    【讨论】:

    • 我得到了相同的结果。我尝试了你的和问题中的编辑文本。
    猜你喜欢
    • 2016-08-19
    • 2016-08-20
    • 2012-04-23
    • 1970-01-01
    • 2016-02-28
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多