1

重複の可能性:
.htaccess書き換えURLが正しく表示されませんか?

htaccessを使用してURLで動的PHPを非表示にしようとしていますが、今ではhtaccessを使用して完全に初心者であり、これまでに学んだことから、これを行うことができました。

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^home/$ http://www.something.com/index.php?p=home [NC,L]
RewriteRule ^home$ http://www.something.com/index.php?p=home [NC,L]

今何が起こるか私が書くときは言うことができます:

www.something.com/home

また

www.something.com/home/

imはhttp://www.something.com/index.php?p=homeにリダイレクトされますが、私がやりたいことは、URLがwww.something.com/homeとして表示されることであり、へのフルパスを表示することではありません。ユーザー、誰かが私が間違っていることを教えてもらえますか?

前もって感謝します :))

4

2 に答える 2

6

書き換えルールで完全なURLを書き込むと、apacheはリダイレクトを実行します(完全なURLが現在のサーバーに対応している場合でも、別のサーバーにリクエストを透過的に書き換えることはできないため)。

最も簡単なソリューション

質問の例では、書き換えルールからドメイン名を削除するだけです。

RewriteRule ^home/?$ /index.php?p=home [QSA,NC,L]

これはURLと一致するか、/homeまたは/home/それらを次のように書き換えます/index.php?p=home

URLを処理する

より柔軟なアイデアは、すべてのURLを書き直すことです。例:

RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]

これは、現在のURLがget引数「p」として何であれ書き換えます。

実際のファイル(/css/foo.cssまたはその他のアセット)のリクエストを書き換えないような完全な例:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]

QSAフラグの目的

両方のqsa例で使用されているフラグは、既存のget引数を、p書き換えられている新しいgetargとマージします。そのため、例えば

 /foo?bar=zum

になります

/index.php?p=/foo&bar=zum
于 2013-01-04T00:21:31.367 に答える
3

これは、完全なURLを入力したために発生します。これを試して:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^home/$ index.php?p=home [NC,L]
RewriteRule ^home$ index.php?p=home [NC,L]
于 2013-01-04T00:22:31.763 に答える