Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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

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_Mod Rewrite - Fatal编程技术网

Php .htaccess默认目录行为

Php .htaccess默认目录行为,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我刚刚开始学习Apache的.htaccess文件,我已经建立了一个网站,所有请求都应该通过我的索引文件(称为Main.php)发送 然后通过wp-GET-var(例如wp=forum)获取“网页”-我希望将其改为Domain/directory/forum,而不是当前的Doman/directory/Main.php?wp=forum 我面临的问题是,我所有的“网页”都存储在自己的目录中,由“网页部件”组成,因此论坛将是“论坛”的子目录,其中包含构成页面的文件。这导致我的重定向出现问题 我已创

我刚刚开始学习Apache的.htaccess文件,我已经建立了一个网站,所有请求都应该通过我的索引文件(称为Main.php)发送

然后通过wp-GET-var(例如wp=forum)获取“网页”-我希望将其改为
Domain/directory/forum
,而不是当前的
Doman/directory/Main.php?wp=forum

我面临的问题是,我所有的“网页”都存储在自己的目录中,由“网页部件”组成,因此论坛将是“论坛”的子目录,其中包含构成页面的文件。这导致我的重定向出现问题

我已创建以下.htacess文件:

#turn redirect engine on
RewriteEngine On
#make sure URI is not a file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^?]*)$ Main.php?wp=$1 [NC,L,QSA]
这可以很好地用于重定向,直到它是一个作为“wp”输入的目录,此时它将添加一个尾随斜杠并损坏wp GET var passed(forum/将被传递,而不是forum,根据需要)

以下是两个我认为可能有效的例子:

Main(不是文件或目录)

  • 循环1:点击对Main.php的重写更改?wp=Main
  • 循环2:URI是文件(无更改)
MainContent(是一个目录)

  • 循环1:点击默认目录更改?(猜测)更改为 MainContent/(注意后面的斜杠)
  • 循环2:启动.htaccess并将其更改为Main.php?wp=MainContent/
  • 循环3:URI是文件(无更改)
此外,每当在my websever中访问一个文件时,在to(例如:Main.php/)之后加上一个尾随斜杠,它将显示为没有链接或包含的文件。它只会显示被请求的文件,似乎忽略了所有css。。。php包括或任何其他内容(这是默认的Apache设置吗?)

很抱歉,这篇文章很长,可能会让人困惑。如果我需要清理任何东西,就大声喊叫。

试试看:

#turn redirect engine on
RewriteEngine On
DirectorySlash Off
#make sure URI is not a file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/?$ Main.php?wp=$1 [NC,L,QSA]

查看Drupal的.htaccess文件可能会有所帮助,它也做同样的事情,即通过索引文件重定向所有请求。该文件中最相关的代码段是:

  # Pass all requests not referring directly to files in the filesystem to index.php?page=[rest of url]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

上面的第二个条件“!-d”可能会解决您描述的问题,但您可能仍然需要在php代码中进行一些“清理”。值得一看的是整个Drupal.htaccess文件,因为它还做了其他事情来加强安全性,例如阻止对某些文件的访问等。

在这一点上简直是被一根胡子打败了。工作起来很有魅力你能举例说明我问题的最后一部分吗?还是应该放在新的帖子里?你可以在这里这样做,但我没有抓住仍然不起作用的东西。对不起,很难举例说明,因为我不确定我在问什么。让我们再试一次:因此,当我在文件的任何一端添加“/”时(例如main.php/),它将显示main.php,但css。。。javascript。。。除了该文件中的基本php和html之外,与该文件相关的任何其他内容都将被删除。知道为什么吗?避免这样做:-)但你可以在html中使用绝对链接或
。我在规则中添加了/以避免。您是否有一个pastebin或Drupal的完全.htaccess?我很有兴趣在不下载整个脚本的情况下看到它。这篇文章有一个链接:除非我弄错了(我可能是错的),否则由于RewriteCond%{REQUEST_FILENAME},这将不起作用-d,因为请求的URI是一个目录,因此如果没有禁用,只需点击403或目录列表/