0

我的网站结构如下

  • 网站
    • 公司/
      • 子目录/
      • 头文件.php
      • 内容.php
      • 页脚.php
    • 索引.php
    • .htaccess

现在在我的.htaccess,我已经这样做URL Re-writinghttp://my_website/page/s/o。现在我想进入子目录,但它以第一个参数为page,并且它没有进入子目录。我不能将子目录放在根目录(以避免重新定义模板结构)

下面是我的.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
4

1 回答 1

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]

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

于 2013-02-13T13:45:36.287 回答