新しいディレクトリを作成してファイルにindex.phpという名前を付けずに、Webページからファイルタイプを削除するにはどうすればよいですか。 http://example.com/google.html から http://example.com/google が欲しいです。
どうすればこれを行うことができますか。
PS:他のチュートリアルをいくつか見てみましたが、混乱しました。 .htaccessで実行できるようになりました
はい、私はこの質問がすでに何度も尋ねられて答えられていることを知っています、しかし私は私の経験に基づいてもう少し包括的な答えを与えます。
これがあなたを助ける.htaccessコードスニペットです:
# Apache Rewrite Rules
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# Add trailing slash to url
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
RewriteRule ^(.*)$ $1/ [R=301,L]
# Remove .php-extension from url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)/$ $1.php
# End of Apache Rewrite Rules
</IfModule>
皆さんの参考のために、ここでいくつかの重要なことを強調したいと思います。
index.php
など).php
拡張子のみを削除します。他の拡張子(例:.html
)も削除する場合は、3番目のブロックをコピーして貼り付け、php
を他の拡張子に置き換えます。上記の@armanPの承認された回答は、phpURLからのremove
.php拡張子ではありません。最後に.php
を使用せずにphpファイルにアクセスできるようにするだけです。たとえば、/file.php
には/file
または/file.php
を使用してアクセスできますが、この方法では、同じ場所を指す2つの異なるURLがあります。
.php
を完全に削除する場合は、/.htaccess
で次のルールを使用できます。
RewriteEngine on
#redirect /file.php to /file
RewriteCond %{THE_REQUEST} \s/([^.]+)\.php [NC]
RewriteRule ^ /%1 [NE,L,R]
# now we will internally map /file to /file.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)/?$ /$1.php [L]
。htmlを削除するには、これを使用します
RewriteEngine on
#redirect /file.html to /file
RewriteCond %{THE_REQUEST} \s/([^.]+)\.html [NC]
RewriteRule ^ /%1 [NE,L,R]
# now we will internally map /file to/ file.html
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)/?$ /$1.html [L]
Apache 2.4 *ユーザー向けのソリューション:
Apacheのバージョンが2.4の場合、RewriteConditions
なしでコードを使用できます。Apache2.4では、END
の代わりにRewriteCond
フラグを使用して、無限ループエラーを防ぐことができます。
これがApache2.4ユーザー向けのソリューションです
RewriteEngine on
#redirect /file.php to /file
RewriteRule ^(.+).php$ /$1 [L,R]
# now we will internally map /file to /file.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)/?$ /$1.php [END]
注:これらのルールを追加した後、外部スタイルシートまたは画像が読み込まれない場合、これを修正するには、リンクを絶対的に<img src="foo.png>
から<img src="/foo.png>
に変更します。ファイル名の前の/
に注意してください。 。または、URIベースを変更して、Webページのヘッドセクションに以下を追加します<base href="/">
。
次の理由により、Webページがcssとjsを読み込めません。
ブラウザのURLが/file.php
から/file
に変わると、サーバーは/file
がディレクトリであると見なし、すべての相対パスの前にそれを追加しようとします。例:URLがhttp://example.com/file/
の場合、相対パスが<img src "/file/foo.png">
に変更されるため、画像の読み込みに失敗します。この問題を解決するには、前回のペラグラフで説明したソリューションの1つを使用できます。