.htaccess RewriteRule查询不起作用

时间:2018-10-31 00:46:12

标签: .htaccess mod-rewrite

我无法使用以下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]

有人可以帮我吗?

3 个答案:

答案 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。几周后!! ??