如何使用 .htaccess 为特定 url 条件和一般 url 条件重写 URL?
How do I Rewrite the URL for both a specific url condition and a general url condition, using .htaccess?
我正在使用 PHP 开发一个带有自定义(基本)CMS 系统的网站。 CMS 系统位于 admin.php 下,站点的其余部分位于 index.php.
下
// 项目解释以获取有关问题的更多上下文(跳至实际问题的下一条评论)//
index.php和admin.php都接受GET变量来控制页面内容。 admin.php 接受定义不同功能的 3 个不同的 GET 变量(a、b 和 c)。
"A" 用于 "pages - contents of the different pages"、"News - Basic blog system" 等主要功能
"B" 是专门用于 "pages" 功能的子链接,用于定义管理员用户正在修改的页面。
"C" 也特定于 "pages" 功能并定义管理员用户正在修改的子页面。
然后index.php也就是项目的"client-side"接受两个get变量(A和B)
"A" 是用户正在访问的页面,在数据库中定义。
"B" 是用户正在访问的子页面,-//-。
// 项目说明结束 //
所以我一直在尝试使用 htaccess 中的 Rewrite 将 URL 重写为对用户更友好的字符串。
(admin.php)
示例:admin.php?a=pages&b=home => /admin/pages/home
(index.php)
示例:index.php?a=about&b=team => /about/team
到目前为止,管理重写条件运行良好。但是我想实现客户端的Rewrite条件,结果发生了冲突。
当前 .htaccess 状态:
RewriteEngine On
RewriteRule ^admin/? admin.php [NC,L]
RewriteRule ^admin/([A-Za-z0-9-&]+)/?$ admin.php?a= [NC,L]
RewriteRule ^admin/([A-Za-z0-9-&]+)/?/([A-Za-z0-9-&]+)/?$ admin.php?a=&b= [NC,L]
RewriteRule ^admin/([A-Za-z0-9-&]+)/?/([A-Za-z0-9-&]+)/?/([A-Za-z0-9-&]+)/?$ admin.php?a=&b=&c= [NC,L]
我一直在查看 htaccess 文档和堆栈上的几个问题,但未能找到可靠的解决方案。
如何根据用户访问的是管理页面还是主(索引)页面重写 url?
谢谢!
你可以使用它:
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= [QSA,NC,L]
RewriteRule ^admin/([^/]+)/([^/]+)/?$ admin.php?a=&b= [QSA,NC,L]
RewriteRule ^admin/([^/]+)/([^/]+)/([^/]+)/?$ admin.php?a=&b=&c= [QSA,NC,L]
# rewrite others
RewriteRule ^([^/]+)/?$ index.php?a= [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?a=&b= [QSA,L]
我正在使用 PHP 开发一个带有自定义(基本)CMS 系统的网站。 CMS 系统位于 admin.php 下,站点的其余部分位于 index.php.
下// 项目解释以获取有关问题的更多上下文(跳至实际问题的下一条评论)//
index.php和admin.php都接受GET变量来控制页面内容。 admin.php 接受定义不同功能的 3 个不同的 GET 变量(a、b 和 c)。
"A" 用于 "pages - contents of the different pages"、"News - Basic blog system" 等主要功能
"B" 是专门用于 "pages" 功能的子链接,用于定义管理员用户正在修改的页面。
"C" 也特定于 "pages" 功能并定义管理员用户正在修改的子页面。
然后index.php也就是项目的"client-side"接受两个get变量(A和B)
"A" 是用户正在访问的页面,在数据库中定义。
"B" 是用户正在访问的子页面,-//-。
// 项目说明结束 //
所以我一直在尝试使用 htaccess 中的 Rewrite 将 URL 重写为对用户更友好的字符串。
(admin.php) 示例:admin.php?a=pages&b=home => /admin/pages/home
(index.php) 示例:index.php?a=about&b=team => /about/team
到目前为止,管理重写条件运行良好。但是我想实现客户端的Rewrite条件,结果发生了冲突。
当前 .htaccess 状态:
RewriteEngine On
RewriteRule ^admin/? admin.php [NC,L]
RewriteRule ^admin/([A-Za-z0-9-&]+)/?$ admin.php?a= [NC,L]
RewriteRule ^admin/([A-Za-z0-9-&]+)/?/([A-Za-z0-9-&]+)/?$ admin.php?a=&b= [NC,L]
RewriteRule ^admin/([A-Za-z0-9-&]+)/?/([A-Za-z0-9-&]+)/?/([A-Za-z0-9-&]+)/?$ admin.php?a=&b=&c= [NC,L]
我一直在查看 htaccess 文档和堆栈上的几个问题,但未能找到可靠的解决方案。
如何根据用户访问的是管理页面还是主(索引)页面重写 url?
谢谢!
你可以使用它:
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= [QSA,NC,L]
RewriteRule ^admin/([^/]+)/([^/]+)/?$ admin.php?a=&b= [QSA,NC,L]
RewriteRule ^admin/([^/]+)/([^/]+)/([^/]+)/?$ admin.php?a=&b=&c= [QSA,NC,L]
# rewrite others
RewriteRule ^([^/]+)/?$ index.php?a= [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?a=&b= [QSA,L]