我的网站结构如下
.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
答案 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]
替换部分中的破折号( - )表示:保持路径不变,即不进行替换。