我有一个目录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.php
和test.php
位于site
目录中。如果它重定向到其他子文件夹,那么它应该
像
http://localhost/site/sweetinc/sub-folder1/test3.php
这是否可行,因为我正在使用.htaccess
使用单独的目录分隔一个组,并将site
目录中的所有文件都视为base files
答案 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]
一些例子:
我的文件子域名中包含以下文件:
http://files.litso.com/sweetinc/hello显示回复“你好”的index.php http://files.litso.com/sweetinc/circle3.PNG在/
中显示实际文件(注意,我没有/ sweetinc /目录,它都是伪造的)