Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.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_Html_.htaccess_Rewrite_Directory Structure - Fatal编程技术网

Php .htaccess、重写引擎和文件夹结构

Php .htaccess、重写引擎和文件夹结构,php,html,.htaccess,rewrite,directory-structure,Php,Html,.htaccess,Rewrite,Directory Structure,我环顾四周,没有找到确切问题的答案 我不确定这是否是我的服务器上最好的文件夹结构,但它本质上就是这样的 / .htaccess []CSS []图像 index.php []其他网站 []站点1 []站点2 index.html []sub.site2.com index.php 也许很明显: mySite.com转到根目录Site1.com转到Site1.com子文件夹Site2.com转到Site2.com子文件夹。sub.site2.com是一个子域,它位于站点2中的子

我环顾四周,没有找到确切问题的答案

我不确定这是否是我的服务器上最好的文件夹结构,但它本质上就是这样的

  • /
    • .htaccess
    • []CSS
    • []图像
    • index.php
    • []其他网站
      • []站点1
      • []站点2
        • index.html
        • []sub.site2.com
          • index.php
也许很明显:

mySite.com转到根目录Site1.com转到Site1.com子文件夹Site2.com转到Site2.com子文件夹。sub.site2.com是一个子域,它位于站点2中的子文件夹中

我的问题是,我无法在根文件夹中获取.htaccess来从所有站点和子站点中删除.html和.php。这就是我到目前为止所做的:

DirectoryIndex index.php index.html

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^([^\.]+)$ $1.html [NC,L]
上面的代码不允许我访问“site2”,但实际上将.php从根站点上剥离。这是一种处理我的文件夹结构的错误方法吗?我是否可以使根目录中的.htaccess影响所有文件夹,或者在每个子文件夹中需要单独的.htaccess文件

此外,网站内的链接如下所示

<a href="about">About</a>

而不是

<a href="about.php">About</a>

htaccess文件工作正常,对吗

问题是,我无法在根文件夹中获取.htaccess来从所有站点和子站点中删除.html和.php

这是因为根文件夹中的htaccess文件位于site1.com、site2.com等站点的文档根目录之外。他们无法遍历“site1”文件夹以外的任何位置

此外,您的规则将永远不会工作,因为您的条件仅应用于第一个规则,第二个规则可以自由重写所有内容并导致循环。您需要复制您的条件:

DirectoryIndex index.php index.html

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

由于site1.com/site2.com/etc站点完全无法访问根htaccess文件,因此您需要在每个站点中复制这些规则。

您似乎有某种嵌套的webroot结构,通常不是这样做的。为每个(子)域指定自己的webroot:
/sites/site1.mydomain.com
/sites/site2.mydomain.com
/sites/sub.site2.mydomain.com
。然后在每个webroot中添加一个
.htaccess
,以处理该域所需的任何重写。现在看起来很明显。谢谢