web-dev-qa-db-ja.com

Webサイトのアドレスからファイル拡張子を削除する方法は?

ウェブサイトをデザインしています。私のウェブサイトのアドレスを次の画像のようにしたい:

file name extensions like (PHP/JSP) are hidden

私のウェブサイトを http://something.com/profile.php のように見せたくないのですが、誰かが私のウェブサイトを開いたときに.php拡張機能がアドレスバーから削除されます。言い換えれば、私は私のウェブサイトが次のようであることを望みます: http://something.com/profile

2番目の例として、StackOverflow Webサイトのアドレス自体を確認できます。

誰かがこれを行うのを手伝ってくれますか?ありがとう!

52
Sumit Gupta

.htaccessファイルをサイトのルートフォルダー(たとえば、/ home/domains/domain.com/htdocs /)に追加して、次のコンテンツを追加します。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
75
Igor

最初に、mod_rewriteモジュールがインストールされていることを確認します。次に、それがどのように機能するかを理解するように注意してください。

URLや拡張子を非表示にしないでください。あなたがすることは、古いものに向ける新しいURLを作成することです、例えば

Webサイトに配置するURLはyoursite.com/play?m=asdfになります

またはそれ以上

yoursite.com/asdf

ディレクトリasdfが存在しない場合でも。次に、mod_rewriteをインストールして、これを.htaccessに配置します。基本的に、要求されたURLがファイルではなく、ディレクトリでもない場合は、スクリプトに送信します。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /play.php [L] 

ほぼ完了-新しいURLを解析するために、PHPスクリプトに何かを書き込む必要があります。古いURLでも機能するように、これを実行する必要があります。変数が常に正確に一致するシステム[〜#〜] or [〜#〜]「SEOフレンドリーURL」と製品IDを関連付けるデータベーステーブルを作成します。

/ Some-Cool-Video(製品ID asdfと同じ)

これの利点は?検索エンジンは、「Some Cool Video」というキーワードにインデックスを付けます。 asdf?誰がそれを検索しますか?

これをプログラムする方法の詳細を説明することはできませんが、クエリ文字列を取得し、最後を取り除きます

yoursite.com/Some-Cool-Video 

「asdf」に変わります

次に、m変数をこれに設定します

m = asdf

したがって、両方のURLは同じ製品に移動します

yoursite.com/play.php?m=asdf 
yoursite.com/Some-Cool-Video 

mod_rewriteは他にも多くの重要な機能を実行できます。Googleがそれを実行し、サーバー上でアクティブにします(おそらく既にインストールされています)。

13
Shiv Singh

さまざまな選択肢があります。それらの1つは、「profile」という名前のフォルダーを作成し、「profile.php」の名前を「default.php」に変更して「profile」フォルダーに入れることです。この方法でこのページに注文することができます:

古いページ: http://something.com/profile.php?id=a&abc=1

新しいページ: http://something.com/profile/?id=a&abc=1

満足できない場合は、複雑な方法についてコメントを残してください。

5
Iman Hejazi

ディレクトリを作成してindex.phpを保持することの問題は、

  1. メニューとのリンクが機能しなくなります
  2. あまりにも多くのディレクトリがあります。たとえば、stackoverflowの各質問には個別のディレクトリがあります。

ソリューションは、1。MOD REWRITE(上記で提案)2. PHPコードを使用して、インデックスファイルに他のファイルを動的にインクルードします。ここでもう少し詳しく読んでください http://inobscuro.com/tutorials/read/16/

2
Rahul Singh

これは、私が使用する簡単なPHP方法です。
拡張子が.phpのページがリクエストされた場合、拡張子が.phpのない新しいリクエストが作成されます。これにより、拡張子.phpはブラウザのアドレスフィールドに表示されなくなります。

.htaccessの多くの提案が役に立たず、.htaccessがサーバーで機能しなかった理由を見つけるよりもPHP 。

これを各PHPファイル(おそらく他の何かの前)の先頭に置きます:

include_once('scripts.php');  
strip_php_extension();  

次に、これらの関数を「scripts.php」ファイルに配置します。

//==== Strip .php extension from requested URI  
function strip_php_extension()  
{  
  $uri = $_SERVER['REQUEST_URI'];  
  $ext = substr(strrchr($uri, '.'), 1);  
  if ($ext == 'php')  
  {  
    $url = substr($uri, 0, strrpos($uri, '.'));  
    redirect($url);  
  }  
}  

//==== Redirect. Try PHP header redirect, then Java, then http redirect
function redirect($url)  
{  
  if (!headers_sent())  
  {  
    /* If headers not yet sent => do php redirect */  
    header('Location: '.$url);  
    exit;  
  }  
  else  
  {
    /* If headers already sent => do javaScript redirect */  
    echo '<script type="text/javascript">';  
    echo 'window.location.href="'.$url.'";';  
    echo '</script>';  

    /* If javaScript is disabled => do html redirect */  
    echo '<noscript>';  
    echo '<meta http-equiv="refresh" content="0; url='.$url.'" />';  
    echo '</noscript>';  
    exit;  
  }  
}  

もちろん、拡張子のないリクエストを拡張子のあるファイルにリダイレクトするには、Apacheをセットアップする必要があります。上記のソリューションは、要求されたURIに拡張子があるかどうかを確認し、拡張子がある場合はURIを要求します。次に、Apacheは拡張子を持つファイルへのリダイレクトを行いますが、要求されたURI(拡張子なし)のみがブラウザのアドレスフィールドに表示されます。利点は、コード内のすべての「href」リンクが完全なファイル名、つまり.php拡張子を保持できることです。

2
Tony

トニー、スクリプトは大丈夫ですが、100個のファイルがある場合は?これらすべてにこのコードを追加する必要があります:

include_once( 'scripts.php');
strip_php_extension();

各phpファイルにメニューを含める(おそらく、すべてのWebページにメニューが表示される)ので、これらの2行のコードをメニューファイルにのみ追加できると思います。私のためのこの仕事:D

1
user5499497

.htaccessを使用してファイル拡張子を削除する

元のURL: http://ravinderrathore.herobo.com/contact.php

urlから.php、.htmlなどのファイル拡張子を削除するhtaccessルール。

RewriteRule ^(.*)$ $1.php

After Rewriting: http://ravinderrathore.herobo.com/contact

RewriteEngine on

RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/

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

RewriteRule ^login_success(/)?$ login_success.php [L,QSA]

RewriteRule ^contact(/)?$ contact.php [L,QSA]
1
Ravinder Kumar

igorと同じですが、2行目がなくても動作するはずです:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
1
Jon

実際、これを操作する最も簡単な方法は

  1. サーバー上の新しいフォルダーを開きます。 "データ"
  2. Index.php(またはindex.html)を入れます

そして、URL www.yoursite.com/dataがそのindex.phpファイルを読み取ります。さらに詳しく知りたい場合は、その中のサブフォルダー(「リスト」など)を開き、そのフォルダーに別のindex.phpを置くと、www.yoursite.com/data/listでPHPファイル。

これにより、これを完全に制御でき、SEOに非常に役立ちます。

1
Dan Horvat

最初の回答とほぼ同じですが、いくつかの利点があります。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

サイトに他のファイル拡張子がある場合は、合計するだけです

0
Võ Minh