1

私は自分のWebサーバーで非常に単純なことを達成しようとしています。.phpで終わるURLを/で終わらせたいです。たとえばwww.example.net/something.phpをwww.example.net/somethingにするか、www.example.net / folder / subfolder/something.phpをwwwにします。 example.net/folder/subfolder/something。さらに、www.example.net / folder / something.php?something =whatever/を持っていてもかまいません。URLの最後の.phpを削除することだけに関心があります。私は他の多くの中でこのコードを使用しました。

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]
RewriteRule (.*)/$ $1.php [L]

ただし、これは一部のページでのみ機能します。たとえば、私のwww.example.com/folder/contactus.phpページでは機能しません。代わりに、404ページを取得します。しかし、それはwww.example/folder/faq.phpで完全に機能します。さらに、コードのさまざまな部分でfile_get_contents()phpリクエストを作成します。内部リクエスト(私のphp関数)が影響を受けないようにこれらのルールを調整する方法はありますか?基本的に、.phpファイルに保持されている他のphp関数に影響を与えることなく、ブラウザーに.phpの終わりなしでURLを表示させたいだけです。私の意図をさらに明確にするために:文字列処理関数を使用して、設定した変数に基づいてphpファイルから特定のテキスト行を抽出します。しかし、現在の書き換えルールでは、ファイル名から拡張子が削除されているため、phpファイルが見つかりません(推測です)。

$file_contents = file_get_contents($filename);

現在、共有のgodaddyホストアカウントでLinuxサーバーを使用しています。

4

2 に答える 2

0

両方のルールにphpチェックを適用する必要があると思います。

RewriteCond %{REQUEST_URI} ^(.*)/$
RewriteCond %{DOCUMENT_ROOT}%1.php -f 
RewriteRule (.*)/$ $1.php [L]

RewriteCond {REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]

さらに、-fチェックは末尾のスラッシュなしで行う必要があります

于 2012-07-27T22:25:06.293 に答える
0

私のページの1つがgetrequestを使用しましたが、以下は期待どおりに機能しました。ポストリクエストに変更したところ、すべて順調でした。

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^GET\ /([^.\ ]+\.)+php(\?[^\ ]*)?\ HTTP
RewriteRule ^(.+)\.php$ http://www.sitename.net/$1 [R=301,L]
RewriteRule ^([^/]+/)*index/?$ http://www.sitename.net/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ http://www.sitename.net/$1 [R=301,L]
RewriteCond $1 !^([^.]+\.)+([a-z0-9]+)$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*[^/])$ /$1.php [L]
RewriteRule (.*)/$ $1.php [L]

1つの小さな問題がまだ残っています。末尾のスラッシュが追加されているページと追加されていないページがあります。末尾のスラッシュを強制するための手がかりはありますか?

于 2012-07-28T15:59:58.213 に答える