やあみんな私はYiiフレームワークの初心者です。URLからindex.phpを削除したいです。リライトエンジンを置くときにyiiドキュメントに従ってください.htaccessファイルのコードとconfig/main.phpファイルのshowScriptNameをfalseに設定すると、500内部サーバーエラーが発生します。htaccessファイルはアプリケーションのルートフォルダーにあります。どこが間違っているのか教えてください
更新:
これは私の.htaccessファイルのコードです:
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
メインページのURLから/index
も削除する場合は、次のように''=>'site/index'
をurlManagerルールの先頭に追加します。
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
''=>'site/index',
'<action>'=>'site/<action>',
yiiドキュメント から直接取得
Index.phpを非表示にするURLをさらにクリーンアップするためにできることがもう1つあります。つまり、URL内のエントリスクリプトindex.phpを非表示にします。これには、WebサーバーとurlManagerアプリケーションコンポーネントを構成する必要があります。
最初に、入力スクリプトのないURLを入力スクリプトで処理できるようにWebサーバーを構成する必要があります。 Apache HTTPサーバーの場合、これは、URL書き換えエンジンをオンにし、いくつかの書き換えルールを指定することで実行できます。次の内容でファイル/wwwroot/blog/.htaccessを作成できます。同じコンテンツを/ wwwroot/blogのDirectory要素内のApache構成ファイルに入れることもできることに注意してください。
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
次に、urlManagerコンポーネントのshowScriptNameプロパティをfalseに構成します。
ここで、$ this-> createUrl( 'post/read'、array( 'id' => 100))を呼び出すと、URL/post/100を取得します。さらに重要なことに、このURLはWebアプリケーションによって正しく認識されます。
私の問題も解決したので、これが役立つことを願っています。
次の3つの手順を実行します。
ApacheでURLの書き換えを有効にします。
プロジェクトのルートに.htaccessを配置します
RewriteEngineオン
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
'urlManager'=>array( 'urlFormat'=>'path', 'rules'=>array( '<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', ), 'showScriptName'=>false, )
以下のようにconfig/main.phpを変更します。
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'caseSensitive'=>false,
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
次に、htaccessファイルを保護されたフォルダ(保護されたフォルダ内にある可能性があります)のあるベースディレクトリに配置します。コードの下にhtaccessファイルを配置します。
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
またはこれで試してください---
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]
完了...うまくいくことを願っています
apache構成値を変更する
AllowOverridenoneからAllowOverrideALL
httpd.confまたはhttpd-vhosts.conf内
このスレッドに出くわしたばかりですが、それを機能させるには、.htaccessファイルを追加するための指示に従うだけでなく、メインの構成ファイル(\ protected\config\main)から以下のセクションのコメントを外す必要があることがわかりました。 php):
// uncomment the following to enable URLs in path-format
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
.htaccessとurlManagerへのすべての変更がまだ機能していないように思われる場合は、Apachehttpd.confファイルのルートディレクトリのAllowOverrideパラメータを「All」ではなく「All」に変更したことを確認してください。 "無し"。変更後、Apacheを再起動します。これは、.htaccessファイルでオーバーライドできるすべてのパラメーターをApacheに決定させるパラメーターであるためです。
プロジェクトをLinuxサーバーに移行したときも、この問題が発生しました。私は示されているすべての方法を実行しましたが、助けにはなりませんでした。次に、。htaccessファイルをprotectedディレクトリも、それから動作しました。