1

htaccessファイルに以下があります

RewriteRule ^([A-Za-z0-9-]+)$ /j/view.php?cat=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)$ /j/display.php?name=$1 [L]

両方とも URL を として取得するように書き換えますhttp://domain.com/some-file-name。このままでは、URL は同じ形式なので、リンクがクリックされると、ブラウザはどちらの書き換え規則が行の最初に来ても解釈します。

同じ URL 構造を維持しながら、解釈して正しく表示する URL を理解するにはどうすればよいですか。

現在、#2 を上に移動すると #2 の解釈を開始し、そのまま許可すると #1 を解釈します。ここで助けが必要です。

4

2 に答える 2

1

コメントの 1 つで、次のように尋ねました。

If I were to make URL become http://domain.com/some-file-name for "view.php" and http://domain.com/some-file-name---[id] for "display.php" where "[id]" will be the "group_id" number in the database, will it make a difference in their URL and cause it to rewrite well?

はい、これは次のルールで可能になります。

# first try to see if belongs to /j/view.php based on URI pattern
RewriteRule ^([a-z0-9-]+)---([0-9]+)/?$ /j/view.php?cat=$1&id=$2 [L,NC,QSA]

# No try /j/display.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9-]+)/?$ /j/display.php?name=$1 [L,NC,QSA]
于 2013-10-01T09:20:23.623 に答える
0

URL 間に一定の違いがない場合、これら 2 つのページ間で要求を常に分割することはできません。2 つのページのそれぞれに独自のプレフィックスがあるように、URL を変更することをお勧めします。

RewriteRule ^c-([A-Za-z0-9-]+)$ /j/view.php?cat=$1 [L]
RewriteRule ^n-([A-Za-z0-9-]+)$ /j/display.php?name=$1 [L]

そうしたくない場合は、2 つのページ間でリクエストをインテリジェントに分割するルーター ページを作成する必要があります。ルールがあります:

RewriteRule ^([A-Za-z0-9-]+)$ /j/router.php?page=$1 [L]

router.phpそして、次のコードのようなファイル。明らかに、私は2つの違いが何であるかを判断できません。たぶん、データベースか何かと照合できます。

<?php
if( condition to check $_GET['page'] for view.php ) {
  $_GET['cat'] = $_GET['page'];
  include( '/j/view.php' );
} else {
  $_GET['name'] = $_GET['page'];
  include( '/j/display.php' );
}
于 2013-10-01T04:13:02.663 に答える