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
iesweetinc
,这样它就可以运行了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
iesweetinc
,这样它就可以运行了ve url喜欢http://localhost/site/company1/home.php
http://localhost/site/company2/home.php