我需要创建以下规则以放置在我的 .htaccess 中

  • 对于每个请求,我想在子文件夹 subdir 中执行文件/路径。
  • 如果该文件不存在,那么我想将此请求转发到 index.php

  • 假设 .htaccess iw 放在 http://domain/folder

    当用户打开 url http://domain/folder/Subfolder/xxx.html
    他应该从 http://domain/folder/subdir/Subfolder/xxx.html 收到文件

    所以这些规则必须考虑在 subdir 中有子文件夹的事实。
    (子文件夹的不同结构:-)
    并且仅当 subdir 下的路径不存在时,才应将请求转发到 index.php

    请帮忙:)

    ps 这是我上一个问题的后续问题。这是完全不同的,包括在 subdir 中有子文件夹的事实。
    -> mod_rewrite: How to search in local folder, subfolder and then redirect to index.php

    最佳答案

    这应该这样做:

    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{ENV:REDIRECT_STATUS} 200
    RewriteRule ^ - [L]
    
    RewriteCond %{REQUEST_URI} ([\w]+\.[\w]+)$ [NC]
    RewriteCond %{DOCUMENT_ROOT}/%1 -f
    RewriteRule ^ /%1 [NC,L]
    
    RewriteCond %{DOCUMENT_ROOT}/subdir%{REQUEST_URI} -f
    RewriteRule ^ /subdir%{REQUEST_URI} [L]
    
    RewriteRule ^ /index.php [L]
    

    稍作优化的更新。
    RewriteEngine on
    #RewriteBase /
    
    RewriteCond %{ENV:REDIRECT_STATUS} 200
    RewriteRule ^ - [L]
    
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^[^/]+\.[^/]+$ - [NC,L]
    
    RewriteCond %{REQUEST_FILENAME} (.*/)([\w]+\.[\w]+)$ [NC]
    RewriteCond %1subdir/%2 -f
    RewriteRule ^ subdir/%2 [L]
    
    RewriteRule ^ index.php [L]
    
  • 以上将适用于任何目录/子目录

  • 更改日志:
  • RewriteBase 注释了相对路径的使用。
  • 检查/file.ext (或是否在当前目录中)。
    下面将检查文件是否存在于当前目录中。RewriteCond %{REQUEST_FILENAME} -fRewriteRule ^[^/]+\.[^/]+$ - [NC,L]


  • 捕获 %1 中的当前目录和 %2 中的 file.ext
  • 关于.htaccess - mod_rewrite : Redirect request to subdir with many subfolders of different structures + redirect to index. php,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9330058/

    10-11 22:30