.htaccess重写规则查询不工作

.htaccess重写规则查询不工作,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我无法使以下规则起作用 我有一个PHP SQL查询来显示网页。它需要一个重写规则,我正试图在.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 RewriteCo

我无法使以下规则起作用

我有一个PHP SQL查询来显示网页。它需要一个重写规则,我正试图在.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-9a-zA-Z]+)

charclass缺少开头[并且也不包含/匹配文字]。

正如我在评论中所说的那样

这里遗漏了一些东西,比如[-0-9a-zA-Z]+

这也会咬到你的

RewriteRule ^([^\.]+)$ $1.php [NC,L]
匹配所有没有点的内容,并将.php添加到[L]最后一个标志中。我敢打赌它从一开始就不会通过这个标志

通常,您首先需要更具体的规则,然后是更通用的规则

另外,如果我正确地回忆起NC I no case,那么您可以去掉A-Z,只需执行[-A-z0-9]+

更好的方法

我试图避免重写查询字符串,并依赖于重写MVC框架中常见的URI方法

  example.com/index.php/category/sub-cat/a-page-of-mine
然后使用路由器和HTACCESS只删除index.php,这样更简单

我的GitHub页面上有一个非常简单的路由器,它显示了如何路由URL


弄乱查询字符串的一个大问题是,您可能会失去使用$的能力,因为它被设计用于搜索表单等。因此,最好不要重写路由。MVC方式为所有请求提供了一个单一的入口点,这样可以更容易地管理常量和自动加载等内容rs…

对。为了使这项工作正常,我需要在[QSA,NC,L]中添加QSA。多少周后!!??

这里缺少一些东西0-9a-zA-Z]+比如[-as在[-0-9a-zA-Z]+可能重复的已投票关闭的输入错误和选项+多视图也会与附加.php的mod_rewrite指令冲突。事实上,在这种情况下,是mod_协商附加了.php,而不是.php文件存在时的mod_rewrite。因此,尽管前面的指令有NL标志-因为先前的重写没有成功。除非.php文件不存在,否则mod_rewrite指令会附加.php扩展名,因为mod_协商没有!