18

.htaccessphpファイルのファイル拡張子を非表示にする何かをファイルに入れたい.phpので、www.example.com / dir / somepageにアクセスすると、www.example.com / dir/somepage.phpが表示されます。

これに対する実用的な解決策はありますか?それが重要な場合、私のサイトはHTTPSを使用しています。

これは現時点での私の.htaccessです。

RewriteEngine On

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

ErrorDocument 404 /error/404.php

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
4

4 に答える 4

51

DOCUMENT_ROOT の下の .htaccess で次のコードを使用します。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L,NE]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]

これは、POST を含むすべての HTTP リクエストにも影響することに注意してください。その後、この種のすべてのリクエストがこのリダイレクトに該当し、そのようなリクエストが機能しなくなる可能性があります。

これを解決するには、最初に例外を追加してRewriteRulePOST リクエストを無視し、ルールが許可されないようにすることができます。

# To externally redirect /dir/foo.php to /dir/foo excluding POST requests
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L,NE]
于 2012-04-05T15:32:22.110 に答える
2
<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f       # if the requested URL is not a file that exists
RewriteCond %{REQUEST_FILENAME} !-d       # and it isn't a directory that exists either
RewriteCond %{REQUEST_FILENAME}\.php  -f  # but when you put ".php" on the end it is a file that exists
RewriteRule ^(.+)$ $1\.php [QSA]          # then serve that file (maintaining the query string)

</IfModule>

奇妙なことに、このコードを Windows の XAMPP で試したところ、HTTP 500 エラーが発生しました。コメントを削除すると修正されました。コメントを移動して、指示と同じ行ではなく、独自の行に配置するようにしました。

于 2012-04-05T12:02:19.020 に答える
0

これを試して:

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]Try:

参照:

.htaccessで.php拡張子を非表示にする方法

于 2012-04-05T11:51:42.717 に答える