web-dev-qa-db-ja.com

.htaccessはすべての拡張子をphpにリダイレクトします

最近、。htaccessファイルを更新して、URLの。php拡張子を非表示にしました。 domain.com/indexにアクセスしようとすると、phpファイルが表示されます。

domain.com/index.phpと入力すると、domain.com/indexURLにリダイレクトされ、.phpが表示されます。ファイルも。

セキュリティ上の理由から、他のすべての拡張子を拡張子なしのURLにリダイレクトして、.phpファイルを表示したいと思います。私の問題は、。html .aspのようなよく知られた拡張子をリダイレクトするように。htaccessを設定できないことです。 aspx .shtmlなどを非拡張子URLに追加し、.phpファイルをコンテンツとして表示します。

私の.htaccessファイルは次のようになります。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# php extension to no extension url
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP/.+
RewriteRule ^(.+)\.php $1 [R=301,L]


# no extension to the .php file
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

# this is for the index
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
6
jameson

.htaccessファイルでこれらを試して、サーバーで書き換えエンジンがオンになっていて、httpd.confであるメインのApacheconfファイルにmod_rewrite.cモジュールがあるかどうかを確認してください。

1. RewriteRule ^ about $ about.php [L] OR 2. RewriteCond%{REQUEST_FILENAME}のRewriteEngine!-d RewriteCond%{REQUEST_FILENAME} .php -f RewriteRule ^(。*)$ $ 1.php

これらがうまく機能することを願っています。

または、それ以外の場合、これはすべての説明を含む別のオプションです。

Apacheリライトルールオプション+ FollowSymLinks RewriteEngine On RewriteBase /

URLに末尾のスラッシュを追加する

RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_URI}!(。[a-zA-Z0-9] {1,5} |/|#(.))$ RewriteRule ^(。 )$ $ 1/[R = 301、L]

URLから.php-extensionを削除します

RewriteCond%{REQUEST_FILENAME}!-d RewriteCond%{REQUEST_FILENAME} .php -f RewriteRule ^([^。] +)/ $ $ 1.php

Apache書き換えルールの終了

あなたが知りたいと思うこと:

  1. これは、すべてのリクエストがindex.phpを介して強制されるフロントエンドコントローラーを使用しないサイト向けです。それが必要な場合は、3番目のブロックを独自のブロックに置き換える必要があります。

  2. この例は、.phpのみで示されています。たとえば.htmlで使用する場合は、3番目のブロックをコピーして貼り付け、(1、)3、4行目の「.php」を「.html」に置き換える必要があります(誰かがそれをうまく行う方法がない限り) ?)

  3. 「example.com/something/」のコンテンツは、「example.com/something.php」または「example.com/something/index.php」から提供できます。

  4. 他のページにリンクするには、href =”/some/things /”またはhref =” // example.com/some/thing/”だけです。

  5. .cssと.jsを使用して、href =”/style.css”またはhref =”/folder1/style.css”にします。それ以外の場合、「example.com/folder2/file.php」からhref =” style.css”を実行すると、「example.com/folder2/style.css」が表示されます。

注:すべてのexample.comの前にhttp://があります。

1
vic

他に「。」がない場合拡張子以外のファイルで、「。php」を任意の文字列に置き換えてみましたか?

# php extension to no extension url
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.\s+\sHTTP/.+
RewriteRule ^(.+)\.php $1 [R=301,L]
0
fab4am

以下のコードを試して、非表示にしたい拡張子を変更してください。

1.htmlファイルの場合

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]

2.phpファイルの場合

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
0
karuppub