次のURLがあるとしましょう:
http://example.com/?param
URLから疑問符を削除するにはどうすればよいですか。リライト
http://example.com/param
このようなものに:
http://example.com/index.php?param
これが私のコードですが、機能しません:
RewriteEngine On
RewriteRule ^(.*)$ /index.php?$1 [P]
次のURLがあるとしましょう:
http://example.com/?param
URLから疑問符を削除するにはどうすればよいですか。リライト
http://example.com/param
このようなものに:
http://example.com/index.php?param
これが私のコードですが、機能しません:
RewriteEngine On
RewriteRule ^(.*)$ /index.php?$1 [P]
2つの完全に異なることが起こる必要があります。まず、ブラウザを外部にリダイレクトして、URLアドレスバーに別の情報を表示する必要があります。次に、ブラウザが2番目のリクエストを再送信すると、サーバーは内部でクエリ文字列を書き換えます。それらはロケーターであるため、実際のURLで任意に追加または削除することはできません。新しいロケーターを作成し、古いロケーターの代わりにこの新しいロケーターを使用するようにブラウザーに指示してから、サーバーの内部で新しいロケーターを古いロケーターに戻すことができます。
説明については、この回答の上部を参照してください
ブラウザを新しいURLに移動するには、次のようにします。
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(index\.php)?\?([^&\ ]+)
RewriteRule ^ /%1? [L,R=301]
これは、URL: http ://example.com/?somethingのリクエストを受け取り、ブラウザを次のURLにリダイレクトします:http ://example.com/something
次に、内部で書き直す必要があります。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L]
http://example.com/somethingに対してリクエストが行われると、サーバーはURIをに書き換えます/index.php?something
。これはサーバーの内部にあるため、ブラウザーはサーバーについて何も認識せず、サーバーがURIを処理している間、URLhttp://example.com/something/index.php?something
を表示し続けます。