.htaccess,RewriteEngine和文件夹结构

时间:2014-05-01 15:58:17

标签: php html .htaccess rewrite directory-structure

我环顾四周,但我找不到确切问题的答案。

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

  • /
    • 的.htaccess
    • [] CSS
    • []图片
    • 的index.php
    • []其他网站
      • [] site 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]

上面的代码不允许我访问"站点2",但是有效地剥离了根网站上的.php。这是一种接近我的文件夹结构的坏方法吗?我可以让root中的.htaccess影响所有文件夹,或者我是否需要在每个子文件夹中使用单独的.htaccess文件。

此外,网站中的链接看起来像这样

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

而不是

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

htaccess文件正常工作是正确的吗?

1 个答案:

答案 0 :(得分:0)

  

问题是我无法获取根文件夹中的.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文件,因此您需要在每个网站中复制这些规则。