将 htaccess modrewrite 用于友好的 url 会出现 404 错误

Using htaccess modrewrite for friendly urls gives a 404 error

我正在尝试重写

http://example.com/category/this-is-my-category

到...

http://example.com/category.php?id=this-is-my-category

我的 .htaccess 文件如下:

Options +FollowSymLinks

RewriteEngine On
RewriteBase /

RewriteRule ^category/(\d+)/([\w-]+)$ /category.php?id= [L]

这会产生 404 错误

http://example.com/category.php 存在于服务器上

我也试过了

RewriteRule ^category/(\d+)/([\w-]+)$ ./category.php?id= [L]

RewriteRule ^/category/([a-zA-Z0-9]+)$ /category.php?id=

我已经阅读了一些关于此的文章,但看不到 .htaccess 文件中的代码有问题。

好的,所以你的第一个正则表达式...

^category/(\d+)/([\w-]+)$

需要一个介于 category 和最后一部分之间的数字,例如 /category/1234/something-else.

你的第二个正则表达式...

^/category/([a-zA-Z0-9]+)$

有一个不正确的前导斜杠(重写规则从重写基开始)并且在 category 之后只需要 个字母和数字,例如 /category/thisIsMyCategory

您正在测试的 URL 包含字母和连字符。

对我来说,这看起来像你想要的

RewriteEngine On

RewriteRule ^category/([\w-]+)$ /category.php?id= [L,QSA]

演示~https://htaccess.madewithlove.be?share=8c3de5aa-68f3-5ec0-9c69-23ff2dbe2d6e


一些笔记...

  • 很少需要 RewriteBase,尤其是如果您的 .htaccess 文件位于根目录中,所以我已将其删除
  • 我添加了 QSA 标志以便保留任何查询参数。例如

    /category/this-is-my-category?foo=bar
    

    变成

    /category.php?id=this-is-my-category&foo=bar