如何使用.htaccess重写特定网址条件和常规网址条件的网址?

时间:2015-10-02 19:57:50

标签: php apache .htaccess mod-rewrite url-rewriting

我正在使用PHP的自定义(基本)CMS系统的网站上工作。 CMS系统位于admin.php下,站点的其余部分位于index.php。

//关于问题的更多背景的项目说明(跳到下一个实际问题的评论)//

index.php和admin.php都接受GET变量来控制页面的内容。 admin.php接受3个不同的GET变量(a,b和c),它们定义了不同的功能。

" A"用于主要功能,如"页面 - 不同页面的内容","新闻 - 基本博客系统"等

" B"是专门用于"页面的子链接"用于定义管理员用户正在修改的页面的功能。

" C"也适用于"页面"功能并定义管理员用户正在修改的子页面。

然后是index.php,它是"客户端"该项目包含两个获取变量(A和B)

" A"是用户正在访问的页面,在数据库中定义。

" B"作为用户访问的子页面, - // - 。

//项目扩展结束//

所以我一直试图在htaccess中使用Rewrite将URL重写为更加用户友好的字符串。

(admin.php的) 示例:admin.php?a = pages& b = home => /管理/页/家庭

(的index.php) 示例:index.php?a = about& b = team => /约/队

到目前为止,管理员重写条件完美无缺。但我想实现客户端重写条件,并且它们发生冲突。

当前.htaccess状态:

RewriteEngine On

RewriteRule ^admin/? admin.php [NC,L]
RewriteRule ^admin/([A-Za-z0-9-&]+)/?$ admin.php?a=$1 [NC,L]
RewriteRule ^admin/([A-Za-z0-9-&]+)/?/([A-Za-z0-9-&]+)/?$ admin.php?a=$1&b=$2 [NC,L]
RewriteRule ^admin/([A-Za-z0-9-&]+)/?/([A-Za-z0-9-&]+)/?/([A-Za-z0-9-&]+)/?$ admin.php?a=$1&b=$2&c=$3 [NC,L]

我一直在寻找关于堆栈的htaccess文档和几个问题,但是已经找到了可靠的解决方案。

如何根据用户访问管理页面或主(索引)页面重写网址?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用:

RewriteEngine On

# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# rewrite admin/
RewriteRule ^admin/?$ admin.php [QSA,NC,L]
RewriteRule ^admin/([^/]+)/?$ admin.php?a=$1 [QSA,NC,L]
RewriteRule ^admin/([^/]+)/([^/]+)/?$ admin.php?a=$1&b=$2 [QSA,NC,L]
RewriteRule ^admin/([^/]+)/([^/]+)/([^/]+)/?$ admin.php?a=$1&b=$2&c=$3 [QSA,NC,L]

# rewrite others
RewriteRule ^([^/]+)/?$ index.php?a=$1 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?a=$1&b=$2 [QSA,L]