【问题标题】:How do I make .htaccess work on the current directory and not subdirectories?如何使 .htaccess 在当前目录而不是子目录上工作?
【发布时间】:2023-12-01 03:49:02
【问题描述】:

我正在使用 mod rewrite 来间接访问我网站根目录中的 PHP 文件。目前,我有这样的东西,

RewriteRule ^(blog|about|page3|etc)$ /$1.php [L]

但我想用的是

RewriteRule ^(.*)$ /$1.php [L]

这样当我想向我的网站添加新页面时,我就不必更新我的 .htaccess 文件了。然而,这个问题是它也会影响我的子目录。这使得 CSS、javascript、图像无法访问,因为它重定向到“/dir/example.png.php”。

那么这里最好的解决方案是什么?

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    试试这个规则:

    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
    RewriteRule .* $0.php [L]
    

    【讨论】:

      【解决方案2】:

      .htaccess 编辑为:

      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ /$1.php [L]
      

      重写引擎启动后,首先会检查请求的文件是系统上的实际文件,还是目录。如果两者都不是,它将执行规则,在这种情况下,通过附加 .php 并提供该文件来尝试查找文件。

      子目录、图像、CSS 等都可以,因为一旦找到它们就会退出重写。

      【讨论】:

      • 这个问题是,只要文件不存在,它就会给我一个服务器错误。
      • 那就不好了。如果除了 Gumbo 建议的方法之外还有其他方法,将会更新。
      【解决方案3】:

      我会使用过滤器来忽略子目录。这样,您只需在添加子文件夹时更改它。如果文件夹中有图像或其他文件,则需要添加类似 Sosh 的行

      以下内容将忽略“images”和“js”子文件夹并重定向其他所有内容

      RewriteRule   ^images*   -  [L]
      RewriteRule   ^js*       -  [L]
      RewriteRule   ^(.*)$     /$1.php   [L]
      

      【讨论】:

        【解决方案4】:

        类似这样的东西(注意!):

        RewriteRule !\.(js|ico|gif|jpg|png|css|zip|gz|html|xml)$ index.php
        

        【讨论】:

        • 不会忽略子文件夹
        最近更新 更多