如果标题不是很清楚,我很抱歉,因为我是mod_rewrite的新手,而且我不确定如何正确地表达这个问题。
我想将 http://www.url.com/module/subdirectory/another_subdirectory/page 等花哨的网址重写为 http://www.url.com/ D_1 =模块&安培; D_2 =子目录&安培; D_3 = another_subdirectory&安培;页=页即可。子目录的数量不同,因此参数d_ *可以是动态的(尽管尝试将其保持在d_1和d_9之间)。花哨的url也可以拥有自己的查询字符串,并且需要在页面参数之后重写它。
我读了一下Apache的mod_rewrite和regex文档,并花了一些时间在Google和Stackoverflow上搜索这个问题的答案,但找不到任何针对这个特定问题的内容。非常感谢那些知识渊博的人对这个问题的任何帮助。
答案 0 :(得分:0)
您可以在根目录的.htacess中尝试类似下面的内容,但您需要完成最多9个案例。
我还假设您的CMS应用程序是index.php。如果没有替换正确的.php文件
RewriteEngine on
RewriteBase /
#one subdir
RewriteRule ^module/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&page=$2 [QSA,L,NC]
#two subdir
RewriteRule ^module/([^/]+)/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&d_3=$2&page=$3 [QSA,L,NC]
#three subdir
RewriteRule ^module/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&d_3=$2&d_4=$3&page=$4 [QSA,L,NC]
答案 1 :(得分:0)
通过使subdir-parts可选,改变Ulrich的代码,不需要那么多重复。最后一部分始终映射到page
:
RewriteRule ^(module)/(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?([^/]+)$ index.php?d_1=$1&d_2=$2&d_3=$3&d_4=$4&d_5=$5&d_6=$6&d_7=$7&d_8=$8&page=$9 [QSA,L,NC]
虽然我更喜欢使用一些PHP代码。
$dirs = expode('/', $_SERVER['REQUEST_URI']);
array_shift($dirs);//remove first empty string.
$page = array_pop($dirs);//get last part of the url.