0

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

这是我当前的 .htaccessfile

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 代码中添加其他内容。

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

4

2 回答 2

1

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

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

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

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

于 2013-04-19T11:25:29.470 回答
0

我认为您编写了错误的重写规则。

它们必须是这样的:

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

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

如此处所述:https ://stackoverflow.com/a/4951918/2274209

希望这能解决您的疑问。

于 2013-04-19T11:18:25.987 回答