【问题标题】:Using htaccess modrewrite for friendly urls gives a 404 error对友好的 url 使用 htaccess modrewrite 会产生 404 错误
【发布时间】:2019-04-15 16:27:31
【问题描述】:

我正在尝试重写

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 文件中的代码存在问题。

【问题讨论】:

  • 仅供参考,实际上是相反的......你想将 nice URL 重写为真实的
  • 您使用什么 URL 进行测试?真的是/category/this-is-my-category吗?
  • 谢谢。我正在使用... example.com/category/this-is-my-category 进行测试

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


【解决方案1】:

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

^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=$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
    

【讨论】:

    猜你喜欢
    • 2013-03-02
    • 2017-02-13
    • 2021-05-17
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2015-04-17
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多