1

我有一个目录site及其子文件夹和文件。它还包含一个.htacess,下面是代码

RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?cc=$1

所以我下面的 url 将是有效的并且工作良好。

http://localhost/site/sweetinc

下面的代码index.php如下

<?php
if (isset($_GET['cc']) and !empty($_GET['cc'])) {
    echo $_GET['cc'];
} else {
    die("Sorry wrong code");
}
?>

这很好用。

现在,我想照常访问或显示所有文件

http://localhost/site/sweetinc/home.php
http://localhost/site/sweetinc/test.php

home.php并且test.php位于site目录中。如果它重定向到其他子文件夹,那么它应该是可见的

http://localhost/site/sweetinc/sub-folder1/test3.php

这是可能的吗,因为我正在使用单独的目录来分隔一个组,并将目录中的.htaccess所有文件site视为base files

在此处输入图像描述

4

1 回答 1

1

这里的技巧(如果我正确理解您的问题)是当您尝试访问实际存在的文件时,您不希望重写规则生效,对吗?

在这种情况下,就在您的 之前 RewriteRule,添加以下行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

这样,重写规则仅在服务器上不存在 url(例如 /site/sweetinc)时才生效。如果是(/site/sweetinc/home.php),则跳过重写器并显示文件。

-f检查文件名是否存在,-d检查目录是否存在,所以 /home/sweetinc/somedir/ 也应该工作)

根据更新的问题进行更新 您需要两个单独的规则。首先,如果使用 url 中的 /sweetinc/ 目录,请将其引用到 /site/ 文件夹:

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

然后,如果该文件实际上不存在,则让 index.php 处理它:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?cc=$1 [L]

一些例子:

我的文件子域中有以下文件:

  • /index.php (它的内容和你的一样,所以它读出 ?cc=
  • /circle3.PNG
  • /带有上述规则的.htaccess

http://files.litso.com/sweetinc/hello显示与“hello”相呼应的 index.php http://files.litso.com/sweetinc/circle3.PNG在 / 中显示实际文件

(注意,我没有 /sweetinc/ 目录,都是伪造的)

于 2012-12-01T11:30:31.923 回答