9

編集: 現在の .htaccess ファイル:

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

## hide .php extension snippet

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

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

私のサイトは、大規模なホスティング アカウントに接続されたドメインのサブフォルダーでホストされています。

basesite
  /iioengine
    /forums
      /.htaccess //file works
      /.... //other MyBB content
    /demos.php
    /index.php //iioengine.com (homepage)
    /.htaccess //file doesn't work
    /... //other iioengine php pages

2 つの異なる htaccess ファイルを使用していることが問題ですか?

動作する必要があるリンクは次のとおりです: http://iioengine.com/demos

この現在の htaccess ファイルがすべてのフォーラムの URL も混乱させていることに気付きました

これはもう機能しません: http://iioengine.com/forums/Forum-Box2D

編集:再開してくれてありがとう、私はいくつかの進歩を遂げました. これが私の現在のhtaccessファイルです:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
</IfModule>

それでも 404 ページが表示されますが、次の行を入れると:

RewriteRule . /index.php [L]

「.php」以外のすべてのリクエストはホームページに転送されます...したがって、mod_rewriteは確実に有効になっていますが、正しく機能していません。問題が何であるか知っている人はいますか?

編集:これは重複ではありません-他の解決策はどれも私にとってはうまくいきません。私の質問は、解決策が存在しないことです。なぜ解決策が機能ないのですか。誰もこれを解決できませんでした。私は自分で多くの解決策を試してきました。このフォーラムの目的は、特定の問題に対する解決策を得ることではありませんか?

明確にさせてください...

サブフォルダーで MyBB を実行していますが、その書き換えは正常に機能します。たとえば、このリンクは機能します: http://iioengine.com/forums/Forum-Box2D

MyBB の一部ではないすべての php ページには、URL にまだ .php 拡張子が含まれています。これらを削除しようとしていますが、何も機能していません。例: http://iioengine.com/demos

... [元の投稿]

これについては明らかに多くの情報がありますが、私はほぼ十数の異なる解決策を試しましたが、404 ページを通過することはできませんでした。

ここに私のサイトがあります: http://iioengine.com/、すべてのページは php で、ホームページとすべてのフォーラム ページ以外のすべての URL の末尾に削除したい '.php' があります。

「.php」以外のリクエストを正しいページにリダイレクトすることに加えて、リクエストの一部であっても「.php」の部分を削除したいと思います (すべてのコンテンツで既に「.php」が指定されているため)。ハイパーリンク)。

これは私がこれまでに持っているもので、ほとんどがこの投稿から取られていますが、うまくいかず、404 ページが表示されます。

RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ $1.php [L,QSA]
RewriteCond %{REQUEST_URI} ^/(.*).php$
RewriteRule ^(.*)$ %1 [L,QSA]

すべての場合に URL からファイル拡張子を削除するには、htaccess ファイルに何が必要ですか? ありがとう

4

5 に答える 5

38

.php を非表示にするには、次のコードを試してください (両方の方法で機能します)。

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

## don't touch /forum URIs
RewriteRule ^forums/ - [L,NC]

## hide .php extension snippet

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

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
于 2013-04-11T04:30:33.200 に答える
3

これを試して。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ $1.php [L,QSA]
</IfModule>

これが機能しない場合は、サーバーで mod_rewrite が有効になっていないか、URL の書き換えがサポートされていません。

于 2013-04-10T05:01:04.887 に答える
0

これはうまくいくはずです

Options -Indexes +FollowSymlinks -MultiViews

RewriteEngine on

DirectoryIndex index.php

# REDIRECT Force requests for named index files to drop the index file filename, and force non-www to avoid redirect loop
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]*/)*index\.(html?|php[45]?)(\?[^\ ]*)?\ HTTP/
RewriteRule ^(([^/]*/)*)index\.(html?|php[45]?)$ http://example.com/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/([^\.]+)\.php\ HTTP/
RewriteRule ^([a-zA-Z0-9_-]+)/([^.]+)\.php$ http://example.com/$1/$2 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/([^/]+)/([^\.]+)\.php\ HTTP/
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([^.]+)\.php$ http://example.com/$1/$2/$3 [R=301,L]

# REDIRECT www to non-wwww
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule .? http://example.com%{REQUEST_URI} [R=301,L]

# REWRITE url to filepath
RewriteRule ^([a-zA-Z0-9_-]+)/([^/.]+)$ /$1/$2.php [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([^/.]+)$ /$1/$2/$3.php [L]
于 2013-04-10T05:40:07.237 に答える