2016-07-13 12 views
2

私は現在、ユーザーが訪問するホームページを確認するために$_GET['base']を使用しています。

私はまた、localhost/?base=guest&page=register

として、でユーザーがどのページを制御するために、これを使用しています

localhost/?base=administratorまたはlocalhost/?base=guestこれはmod_rewriteの、またはhtaccessファイルを使用するにはどのような方法があり、その結果、どのように変更するにはこのシステムは機能しますか? 自分のコードを変更することは問題ではありませんが、これは可能ですか?

EDIT:

私はachiveしようとしていますこの:

localhost/?base=guestからlocalhost/guest
localhost/?base=adminからlocalhost/admin
localhost/?base=guest&page=register以下localhost/guest/register

である私のhtaccessファイルに

RewriteEngine On 
RewriteRule ^([^/]*)/([^/]*)$ /?base=$1&page=$2 [L] 
RewriteRule ^([^/]*)$ /?base=$1 [L] 

ドキュメントパスは、ドキュメントパスの呼び出し方法に影響しますか?私はcaseループを使用して、必要な項目を含めるようにしています。

しかし、これはlocalhostで動作しますが、他のすべてのアドレスをmainにループします。

RewriteEngine On 
RewriteRule ^$ /index.php?base=guest[L] 

しかし、期待通りの結果は得られませんでした。 .htaccessファイルで

+0

全くわからない、しかし、はい、 '.htaccess' /'頻繁にリダイレクトするために使用されているmod_rewrite' /異なる人々を送ってからフォルダURLのパラメータに応じて場所が異なります。 – Epodax

+0

モッズのいくつかを試しましたが、実際には何も変わりません。質問を更新するでしょう – Ctc

+1

@Ctc達成したいことをよりよく説明できますか?たとえば、 'localhost/guest/register'が' localhost /?base = guest&page = register'をリダイレクトするようにしたいとします。 –

答えて

1

あなたのルールは、逆の順序でも、以下のようにする必要があります。それは、あなたがそれを持っているために保管されている場合、両方のlocalhost/?base=guest&page=register & localhost/?base=administratorがルールに一致しますされているので

RewriteRule ^([^/]*)/([^/]*)$ /?base=$1&page=$2 [L] RewriteRule ^([^/]*)$ /?base=$1 [L]

RewriteRule ^([^/]*)$ /?base=$1

逆順にすると、最初のルールはlocalhost/?base=guest&page=registerにのみ一致します。 localhost/?base=administratorの最初のルールと一致しません。私はそれが助けて欲しい

+0

これは理にかなったが、私は後でエラー500を受け取った。 – Ctc

+0

貼り付けた上記のコードから空白などをコピーしないように注意してください。どのURLにアクセスしようとしていますが、500のエラーが表示されますか? – tovishalck

+0

localhostにアクセスすると500を返し、localhost/guestも500 – Ctc

1

ですから、この単純なコードを使用することができます

RewriteEngine on 

RewriteRule ^(\w+)$ index.php?base=$1 [L] 
RewriteRule ^(\w+)/(\w+)$ index.php?base=$1&page=$2 [L] 

\wシンボルa-z0-9と一致して_を強調します、私はそれらの文字は、あなたのケースのために十分にあると思いますが、あなたは拡張が必要な​​場合は、それが簡単になります

それでも $_GET配列に basepageパラメータを取得するので、あなたが、あなたのコードを変更する必要はありません。この場合にも

UPDATE:

pagebase PARAMSクエリ文字列を無効にする(他のparamsを必要とすることができる)下部のコードに次の2行を追加します。

RewriteCond %{THE_REQUEST} (\?|&)(page|base) [NC] 
RewriteRule .* - [L,R=404] 
+0

を返します。これは 'localhost/guest'と' localhost/guest/register'にアクセスして 'localhost /?base = guest&page = register'にアクセスするときに機能します。それでも完全にリダイレクトする方法はありますか?答えのアップヴォート。 – Ctc

+0

確かに可能ですが、すぐに回答を更新します。ありがとうございました。 –

+0

私はそれを更新しましたが、ベースのみを無効にし、ページのパラメータをget varから取り除きましたが、望むならば、URL内の任意のパラメータを渡して無効にすることができます –

1

あなたは存在しないファイルを除外する必要がそして、ルール問題が何であるかを

RewriteEngine On 
# if the request is a dir 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
# or file 
RewriteCond %{REQUEST_FILENAME} -f 
#do nothing 
RewriteRule^- [L] 
RewriteRule ^([^/]*)/([^/]*)$ /?base=$1&page=$2 [L] 
RewriteRule ^([^/]*)$ /?base=$1 [L] 
+0

これはよく、コメントのおかげで、少しだけ学んだ。 – Ctc

+0

@starkeen: 'RewriteRule^- [L]'は何をするのですか? – tovishalck

+0

この行には "uriを書き換えないでください"と表示されます。 – starkeen

関連する問題