1

働けないt understand, why URL rewrite doesn

コンテンツを含むファイルを取得するスクリプトがあります。

   if($pg){
        if(file_exists("resources/pages/".$pg.".php")){
            include("resources/pages/".$pg.".php");
        }
        else{
            include("resources/pages/notfound.php");
        }
   }
   else {
        include("resources/pages/home.php");
   }

そして、URLを書き換える必要があるhtaccess。書き換える必要があるカテゴリ、ページ、および言語文字列があります。

RewriteEngine On
RewriteRule ^([^/]*)/$ /?lang=$1 [NC,OR]
RewriteRule ^([^/]*)/$ /?cat=$1 [NC,OR]
RewriteRule ^([^/]*)/$ /?pg=$1 [NC,OR]
RewriteRule ^([^/]*)/([^/]*)/$ /?lang=$1&pg=$2 [NC,OR]
RewriteRule ^([^/]*)/([^/]*)/$ /?cat=$1&pg=$2 [NC,OR]
RewriteRule ^([^/]*)/([^/]*)/$ /?lang=$1&cat=$2 [NC,OR]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/$ /?lang=$1&cat=$2&pg=$3 [NC,L]

これにより、内部サーバー エラーが表示されます。最初の行だけを残す場合

RewriteEngine On
RewriteRule ^([^/]*)/$ /?lang=$1 [L]

言語スイッチのみ正常に動作します。2列目を入れると

    RewriteEngine On
RewriteRule ^([^/]*)/$ /?lang=$1 [NC,OR]
RewriteRule ^([^/]*)/$ /?cat=$1 [NC,L]

言語切り替えは機能しますが、次のルールは機能しません。:(

4

1 に答える 1

0

ORフラグは でのみ使用され、でRewriteCond使用しようとするとエラーが発生しますRewriteRule。問題は、一致するパターンに関する限り/?lang=、 、/?cat=、およびにルーティングされる URI/?pg=同一であることです。次の URL を指定します。

http://yourdomain.com/blahblah/

$1を使用して、3 つのパターン ( all ^([^/]*)/$) がすべて一致し、後方参照として/blahblah/グループ化されます。しかし、それはラングですか?猫ですか?それともページですか?3 つのそれぞれに一致するパターンを一意に作成する必要があり、相互に排他的である必要があります。blahblah

pgパラメータは数字のみですか?もしそうなら、それにルーティングするパターンは^([0-9]+)/$. lang 変数は 2 文字だけですか? その場合、 lang にルーティングするパターンは^([a-z]{2})/$. これは、cat パラメータが 1 文字または 2 文字以上の場合、または数字と記号が含まれている場合にのみ機能することに注意してください。

それが何であれ、あなたはそれを解決する必要があります。そのため、この動作が見られます。

于 2013-01-23T17:30:48.933 に答える