我无法使用以下RewriteRule
。
我有一个PHP SQL查询来显示网页。它要求我尝试在RewriteRule
文件中实现的.htaccess
规则。
这是当前的完整URL。
www.example.com/category/sub-cat/page.php?art_url=a-page-of-mine
我做不到
www.example.com/category/sub-cat/a-page-of-mine
下面的我的代码:
Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
ErrorDocument 404 /error-404.php
#error 404
RewriteRule ^error/?$ error-404.php [NC,L]
RewriteRule ^category/sub-cat/(0-9a-zA-Z]+) category/sub-cat/page.php?art_url=$1 [NC,L]
有人可以帮我吗?
答案 0 :(得分:1)
我在评论中说
(0-9a-zA-Z]+)
中缺少一些内容,例如[-
中的([-0-9a-zA-Z]+)
这也会咬你...
RewriteRule ^([^\.]+)$ $1.php [NC,L]
匹配没有点的所有内容,并在最后一个标记.php
上添加[L]
。我敢打赌,它永远不会超越那个。
通常,您首先需要更具体的规则,然后是更通用的规则。
如果我没有记错NC
的情况,那么您可以摆脱A-Z
,而只需[-a-z0-9]+
更好的方法
我尝试避免查询字符串重写,而是依靠MVC框架中常见的URI重写方法
example.com/index.php/category/sub-cat/a-page-of-mine
然后使用路由器和HTACCESS仅删除index.php
,那样简单得多。
我在GitHub页面上有一个非常裸露的骨头路由器,展示了如何路由这样的URL。
https://github.com/ArtisticPhoenix/MISC/tree/master/Router
搞乱查询字符串的一个大问题是,您可能会失去使用$_GET
的能力,而该功能原本是用于搜索表单等事物的,因此最好不要路由。此外,MVC方式为您处理所有请求提供了一个入口点,从而可以更轻松地管理常量和自动加载器之类的东西。...
答案 1 :(得分:0)
哦,这当然是坏事:
(0-9a-zA-Z]+)
charclass缺少开头[
,并且也不包含/匹配文字-
。
答案 2 :(得分:0)
对。为了使此工作正常进行,我需要在[QSA,NC,L]中添加QSA。几周后!! ??