将htaccess modrewrite用于友好的URL会产生404错误

时间:2018-11-12 22:11:19

标签: php regex .htaccess mod-rewrite friendly-url

我正在尝试重写

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=$1 [L]

这会导致404错误

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

我也尝试过

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

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

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

1 个答案:

答案 0 :(得分:4)

对,那么您的第一个正则表达式...

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

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

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

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

的斜杠不正确(重写规则始于重写基础),并且在category之后仅个字母和数字,例如/category/thisIsMyCategory

您要测试的网址包含字母和连字符。

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

RewriteEngine On

RewriteRule ^category/([\w-]+)$ /category.php?id=$1 [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