Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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隐藏子文件夹_Php_Apache_.htaccess - Fatal编程技术网

Php 无法使用.htaccess隐藏子文件夹

Php 无法使用.htaccess隐藏子文件夹,php,apache,.htaccess,Php,Apache,.htaccess,我正在尝试删除url的url.com/php/(/php/)部分,并尝试使用htaccess进行以下操作 RewriteCond %{REQUEST_URI} !^/php RewriteRule (.*) /php/$1 [QSA,L] 但在服务器上收到此错误: 在此服务器上找不到请求的URL/php/index.php 在每种情况下,它实际上都是在我的url.com地址之后添加/php/。我尝试了大量其他线程,所有线程的结果都不同,但这一个实际上从url中删除了/php/,只是在本例中假设

我正在尝试删除url的url.com/php/(/php/)部分,并尝试使用htaccess进行以下操作

RewriteCond %{REQUEST_URI} !^/php
RewriteRule (.*) /php/$1 [QSA,L]
但在服务器上收到此错误:

在此服务器上找不到请求的URL/php/index.php

在每种情况下,它实际上都是在我的url.com地址之后添加/php/。我尝试了大量其他线程,所有线程的结果都不同,但这一个实际上从url中删除了/php/,只是在本例中假设/php/每次都属于url。有没有办法解决这个问题

谢谢

编辑:现在我想起来了,实际上我正试图重写整个文件夹树,以便只显示文件名和url

因此url.com/php/ra/file.php?id=1显示为url.com/file.php?id=1

我的整个htaccess文件以消除混淆:

# Use PHP5.4 Single php.ini as default
AddHandler application/x-httpd-php54s .php
Options -Indexes +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://urlreplaced.com/$1 [R,L]
RewriteCond %{REQUEST_URI} !^/php
RewriteRule (.*) /php/$1 [QSA,L]
编辑2:为这一混乱道歉

我的网站url是:

当前/php/处于下一个级别 其中是/ea/,/hbu/,/hc/,/ra/,/st/,和/tut/

php包含很多文件,但都以.php结尾并接受GET vars

以及每个目录中可能包含100个.php文件。如果我正确理解到目前为止我读到的关于这个问题的内容,
$1
在子目录中包含了哪些文件之后,不是吗

我需要任何和所有超过/php/目录的文件都以URL.com/example.php?var=x的形式显示在URL中,无论哪个子目录超过该目录

因此,无论example.php存在于/php/ra或/php/hbu中,还是仅存在于plain/php中,它仍然等于url.com/example.php


感谢您的帮助

基于您在编辑中提供的URL,如果您只想从URL中删除PHP路径并保留文件名和查询字符串,您可以这样做

 RewriteEngine On
 #rewrite http to https
 RewriteCond %{HTTPS} off
 RewriteRule ^(.*)$ https://urlreplaced.com/$1 [R=301,L]
 #if full real URL is used, redirect to file.php
 RewriteCond %{THE_REQUEST} [A-Z]{3,}\ /+php/ra/file\.php\?id=([^&\ ]+)
 RewriteRule ^ file.php?id=%1 [R=301,L]
 #if request is a real file or directory do nothing
 RewriteCond %{REQUEST_FILENAME} -f [OR]
 RewriteCond %{REQUEST_FILEMAME} -d
 RewriteRule ^ - [L]
 #rewrite full path to file.php
 RewriteCond %{QUERY_STRING} ^id=(.+)$
 RewriteRule ^file\.php$ /php/ra/file.php?id=%1 [L]
现在你的URL可以是这样的

http://example.com/file.php?id=30

你打开了.htaccess文件中的重写引擎了吗?所以/ra/只是一个示例目录,我在/php/文件夹中有很多,还有数百个文件,我显然无法为它们编写单独的规则。我不熟悉htaccess脚本是如何工作的,所以我需要复制您的回复的哪些部分才能到达所有单独的子目录?我有5个左右,我需要重复重写。另外,如何对文件名进行通配符?这显然不是file.php,像这样的示例往往没有帮助。我们必须知道确切的要求,否则我无法给出正确的解决方案。如果你给出一个具体的例子/文件,我会给出一个具体的答案。更新你的问题,看看是否可以按照你想要的方式完成。抱歉,我又编辑了我的帖子。大多数情况下,我只是在理解您编写的代码是如何起作用的方面遇到了困难,更重要的是,我正在寻找进一步的解释,以便对其进行分析。
因此,无论example.php存在于/php/ra或/php/hbu中,还是仅存在于plain/php中,它仍然等同于hospitaldatasolutions.com/example.php
,都不会起作用。apache如何知道检查该文件的文件夹?你不能有一个简单的文件,并期望它知道在哪个文件夹中查找。重写不是这样的。我只是想隐藏我的目录结构。我不能告诉它,如果有人去某个目录中的某个文件从url中删除/php/ra?即使每个目录都有多个.htaccess文件?