【问题标题】:Rewritten URL shows 404 errors重写的 URL 显示 404 错误
【发布时间】:2013-04-19 11:12:52
【问题描述】:

我已将我的 URL 从 website.com?id=1 重写为 website.com/1 并且在尝试访问该页面时遇到 404 错误并且想不出解决方案。我目前正在开发链接缩短器。这是必需的,以便用户能够访问他们的短链接。

这是我当前的 .htaccess 文件

RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /(index\.php)?\?id=([0-9]+)([^\ ]*)
RewriteRule ^ /%3?%4 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/?$ /?id=$1 [L,QSA] 

我不知道这是否与 .htaccess 文件有关,或者我是否需要在我的 php 代码中添加其他内容。

有人有什么想法吗?谢谢。

【问题讨论】:

    标签: php apache mod-rewrite url-rewriting


    【解决方案1】:

    您需要在第二条规则中明确地重写回index.php。在处理重写规则时,DirectoryIndex 指令已经被处理(或者可能永远不会被处理 - 这在一定程度上取决于您的虚拟主机配置以及声明 DirectoryIndex 指令的范围)。

    这样做的最终结果是您需要将请求显式重写为要处理请求的脚本,而不能只是将其重写到目录的根目录。尝试将您的第二个重写规则更改为:

    RewriteRule ^([0-9]+)/?$ /index.php?id=$1 [L,QSA]
    

    就个人而言,看到其他人使用%{THE_REQUEST} 方法来解决这个问题很有趣,这是我自己最近才提出的一个想法,尽管我可能不是第一个这样做的人。为了将来的访问者的利益,这里有一个related post,它解释了为什么会出现这个要求以及它背后的想法。

    【讨论】:

    • 不幸的是没有运气:/我很确定这是按照告知的方式配置的,但是:pastebin.com/gR7VFeNg 如果您有兴趣查看错误本身。 oli.pw?id=1。它应该回显类似“设置 URL”的内容,但它会将我带到空白 404。
    • @OliverK 我认为这些规则在根目录的 .htaccess 中,而不是在 httpd.conf 或子目录中?
    • 哦哇..我有一个完整的金发时刻。我在另一个文件中有 .htaccess。保存此域的根目录而不是文件夹。我的错。我会给你这个信用,它非常有用。非常感谢!
    • @OliverK 不用担心。 FWIW 我可能会在第一个条件/规则中做一些更像this(未经测试)的事情 - 它对一些轻微的 HTTP 违规行为更宽容一点,Apache 可能会原谅它,它不再依赖首先出现的 id 参数在查询字符串中。
    【解决方案2】:

    我认为你写错了重写规则。

    它们必须是这样的:

    对于example.com/website.php?id=x..

      RewriteEngine On
      RewriteCond %{QUERY_STRING} ^id=([^/]+)$
      RewriteRule ^website\.php$ %1/ [L]
    

    在这里讨论:https://stackoverflow.com/a/4951918/2274209

    希望这能解决您的问题。

    【讨论】:

    • product 是从哪里来的?
    • 我已经提供了产品来自哪里的参考,并且也编辑了我的答案
    猜你喜欢
    • 2013-08-13
    • 2014-06-25
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2013-05-31
    • 2014-05-10
    • 2013-11-26
    • 2013-11-24
    相关资源
    最近更新 更多