重写的URL显示404错误

时间:2013-04-19 11:12:53

标签: php apache mod-rewrite url-rewriting

我已将我的网址从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代码中添加其他内容。

有人会有某种想法吗?感谢。

2 个答案:

答案 0 :(得分:1)

您需要在第二条规则中明确重写回index.php。在处理重写规则时,DirectoryIndex指令已经被处理(或者根本不会被处理 - 它取决于您的虚拟主机配置以及声明DirectoryIndex指令的范围。

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

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

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

答案 1 :(得分:0)

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

他们必须是这样的:

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

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

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

希望这会解决您的问题。