进入与.htaccess冲突的子目录

时间:2013-02-13 11:53:06

标签: php .htaccess subdirectory

我的网站结构如下

  • 网站
    • INC /
      • 子目录/
      • 的header.php
      • content.php
      • footer.php
    • 的index.php
    • .htaccess

现在,在我的.htaccess中,我以URL Re-writing的方式完成了http://my_website/page/s/o。现在我想进入子目录,但它将第一个参数作为page,而不是进入子目录。我不能将子目录放在root上(以避免重新定义模板结构)

下面的

是我的.htaccess文件

  AddDefaultCharset utf-8
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]

DirectoryIndex index.php

RewriteRule ^([a-zA-Z0-9_-]{3,20})/([^/]+)/([^/]+)?$ index\.php?page=$1&s=$2&o=$3 [L]

RewriteRule ^([a-zA-Z0-9_-]{3,20})/([^/]+)?$ index\.php?page=$1&s=$2 [L]

RewriteRule ^([a-zA-Z0-9_-]{3,20})/?$ index\.php?page=$1 [L]

RewriteRule ^([a-zA-Z0-9_-]{3,20})?$ index\.php?page=$1 [L]

ErrorDocument 404 /404

1 个答案:

答案 0 :(得分:1)

您需要弄清楚如何从那些定位index.php的“真实”子目录请求中分离出来。我假设您只有一组有限的实际子目录,并且这些子目录与/page/s/o方案不冲突。例如,如果www.mysite.com/users/x/y是有效请求,则您不能拥有实际的/users子目录。

要过滤掉实际的以子目录为目标的请求,请创建一个“捕获”实际子目录的RewriteRule语句:

RewriteRule ^/realsubdir - [L]
RewriteRule ^([a-zA-Z0-9_-]{3,20})/([^/]+)/([^/]+)?$ index\.php?page=$1&s=$2&o=$3 [L]
RewriteRule ^([a-zA-Z0-9_-]{3,20})/([^/]+)?$ index\.php?page=$1&s=$2 [L]
RewriteRule ^([a-zA-Z0-9_-]{3,20})/?$ index\.php?page=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]{3,20})?$ index\.php?page=$1 [L]

替换部分中的破折号( - )表示:保持路径不变,即不进行替换。