我有这个链接:http://www.domain.com.mk/lajmi.php?id=2790,
我想将其更改为http://www.domain.com.mk/lajmi/2790
使用此代码,我可以将链接更改为/ lajmi / 2790,但我收到404错误。 我的意思是我得到了链接
http://www.domain.com.mk/lajmi/2790
,但它有404错误(我没有内容)
这是我的代码:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com\.mk$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com\.mk$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^lajmi\.php$ http://domain.com.mk/lajmi/%1? [R=302,L]
我做错了什么?
答案 0 :(得分:1)
试试这个:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com\.mk$
RewriteCond %{QUERY_STRING} ^id=(\d*)$
RewriteRule ^lajmi\.php$ http://domain.com.mk/lajmi/%1? [R=302,L]
RewriteRule ^lajmi/(\d*)$ lajmi.php?id=$1&r=0 [L]
(最终规则中的& r = 0表示没有获得无限循环)
答案 1 :(得分:0)
单向重写:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com\.mk$
RewriteRule ^lajmi/(\d*)$ lajmi.php?id=$1 [L,QSA]
这意味着每个类型的/lajmi/2790
都会在子请求中传递给/lajmi.php?id=2790
。
然而,在这种情况下,如果用户自己点击/lajmi.php?id=2790
,那么这是他将在浏览器中看到的网址,而不是“美化的网址”。
双向重写:
RewriteEngine On
RewriteBase /
; Redirect lajmi.php?id=2790 to a beutified version, but only if not in sub-request!
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com\.mk$
RewriteCond %{IS_SUBREQ} !=true
RewriteCond %{QUERY_STRING} ^id=(\d*)$
RewriteRule ^lajmi\.php$ lajmi/%1 [R=301,L]
; Make the beutified uri be actually served by lajmi.php
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com\.mk$
RewriteRule ^lajmi/(\d*)$ lajmi.php?id=$1 [L]
此处,在第一个规则中添加了RewriteCond
,检查这不是子请求,以确保规则不循环。
您可以选择您喜欢的方式,但如果您已经以“美化”的方式在HTML中构建链接,那么第一种方法已经足够了(不需要将浏览器重定向两次只是为了查看页面)。