Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php .htaccess指定的带有基文件的url_Php_.htaccess - Fatal编程技术网

Php .htaccess指定的带有基文件的url

Php .htaccess指定的带有基文件的url,php,.htaccess,Php,.htaccess,我有一个目录站点及其子文件夹和文件。 它还包含一个.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 {

我有一个目录
站点
及其子文件夹和文件。 它还包含一个
.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");
}
?>
home.php
test.php
位于
site
目录中。如果它重定向到其他子文件夹,那么它应该 像

http://localhost/site/sweetinc/sub-folder1/test3.php
这是可能的,因为我正在使用
.htaccess
使用分离目录分离组,并将
站点
目录中的所有文件视为
基本文件

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

在这种情况下,就在您的
重写规则
之前,添加以下行:

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]
一些例子:

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

  • /php(它的内容与您的内容相同,所以它会读出?cc=
  • /circle3.PNG
  • /.htaccess使用上述规则
显示响应“hello”的index.php 在中显示实际文件/

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

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

在这种情况下,就在您的
重写规则
之前,添加以下行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
这样,重写规则仅在url(/site/sweetinc例如)在服务器上不存在时生效。如果url确实存在(/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]
一些例子:

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

  • /php(它的内容与您的内容相同,所以它会读出?cc=
  • /circle3.PNG
  • /.htaccess使用上述规则
显示响应“hello”的index.php 在中显示实际文件/


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

为了更好地理解,我已经用图像更新了问题。但是当我将
sweetinc
更改为
abc
时,它不起作用,注意:
sweetinc
abc
是自动更改的,可以稍后更改
xyz
,在这种情况下,将第一条规则中的
^sweetinc/
替换为
([^/]+)/
你的意思是这样说
重写规则^([^/]+)/(.*)$/$1[L]
这不起作用我用图像更新了问题以便更好地理解。但是当我将
sweetinc
更改为
abc
时,它不起作用,注意:
sweetinc
abc
是自动更改的,可以在以后
xyz
在这种情况下,在第一个ru中替换
^sweetinc//code>用
^([^/]+)/
你的意思是这样说
重写规则^([^/]+)/(.*)$/$1[L]
这不起作用。我真的不了解您的更新。文件夹/sweetinc/不存在,但您希望人们使用url/site/sweetinc/来显示/site/中实际存在的文件,对吗?那么index.php?cc=与此有什么关系?当请求的url(如/site/sweetinc/之类)时,您想使用它吗不存在,因此它会显示index.php?cc=something,但如果url确实存在,它就不会显示?我说得对吗?是的,
/sweetinc/
不存在,我想显示所有文件都在
/site/sweetinc/
中,实际上我想
index.php?cc=/code>知道
fakedirectoryname
ie
sweetinc
,这样它就可以运行了ve url喜欢
http://localhost/site/company1/home.php
http://localhost/site/company2/home.php
我不太理解您的更新。文件夹/sweetinc/不存在,但您希望人们使用url/site/sweetinc/来显示实际位于/site/中的文件,对吗?那么index.php?cc=与此有什么关系h it?当请求的url(如/site/sweetinc/something)时,您想使用它吗不存在,因此它会显示index.php?cc=something,但如果url确实存在,它就不会显示?我说得对吗?是的,
/sweetinc/
不存在,我想显示所有文件都在
/site/sweetinc/
中,实际上我想
index.php?cc=/code>知道
fakedirectoryname
ie
sweetinc
,这样它就可以运行了ve url喜欢
http://localhost/site/company1/home.php
http://localhost/site/company2/home.php