1

私はこのリンクを持っています: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]

私が間違っていることは何ですか?

4

2 に答える 2

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は、無限ループを取得しないためのものです)

于 2012-08-13T15:50:03.783 に答える
0

一方向の書き換え:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com\.mk$ 
RewriteRule ^lajmi/(\d*)$ lajmi.php?id=$1 [L,QSA]

これは、あらゆる種類のURIがサブリクエストで/lajmi/2790渡されることを意味します。/lajmi.php?id=2790

ただし、この場合、ユーザー/lajmi.php?id=2790が自分でヒットした場合、これは「美化されたもの」ではなく、ブラウザに表示されるURLです。


双方向の書き換え:

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でリンクを「美化」された方法で構築している場合は、最初のアプローチで十分です(ページを表示するためだけにブラウザーを2回リダイレクトする必要はありません)。

于 2012-08-14T09:43:32.163 に答える