.htaccess使用基本文件指定了url

时间:2012-12-01 11:11:54

标签: php .htaccess

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

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

所以我的下面的网址会有效并且运作良好。

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.phptest.php位于site目录中。如果它重定向到其他子文件夹,那么它应该 像

一样可见
http://localhost/site/sweetinc/sub-folder1/test3.php

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

enter image description here

1 个答案:

答案 0 :(得分: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显示回复“你好”的index.php http://files.litso.com/sweetinc/circle3.PNG在/

中显示实际文件

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