1

で実行されているWebサイトがlocalhost/pmあり、RewriteBaseが正しく設定されてい/pm/ます。私のドキュメントにはリンクタグがあります:<link ... href="themes/default/css/default.css">

URLがlocalhost/pmまたはlocalhost/pm/fooCSSが正常に機能する場合。ただし、URLにさらにスラッシュがあるlocalhost/pm/foo/bar場合は、スタイルシートがに変更された場合の相対URLのようになりますfoo/themes/default/css/default.css

リンクタグに何らかのPHPパス解決を設定せずにこれを機能させるにはどうすればよいですか?

# invoke rewrite engine
RewriteEngine On
RewriteBase /pm/

# Protect application and system files from being viewed
RewriteRule ^(?:system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

編集:

基本的に私が今必要としているのはこれです:リクエストにフォルダ名が含まれている場合/themes/は、前のすべてをスクラップし/themes/、残りを次のように書き直します/pm/themes/...

このように試しましたRewriteRule ^.*(/themes/.*)$ /pm/themes/$1が、内部サーバーエラーが発生します。なんで?

このようにするとRewriteRule ^.*(/themes/.*)$ /pm/themes/(つまり、末尾から$ 1を削除するだけで)、URLを使用するとhttp://localhost/pm/foo/themes/foo/、結果の物理的な場所http://localhost/pm/themesも予想どおりになります。これは、少なくとも私の正規表現が正しいことを意味します。私は何が欠けていますか?

4

2 に答える 2

1

RewriteRuleはほぼ正しい

RewriteRule ^.*(/themes/.*)$ /pm/themes/$1

これはに書き換えhttp://localhost/pm/foo/themes/default/css/default.cssられますがhttp://localhost/pm/themes/themes/default/css/default.css、これはthemes多すぎます。代わりにこれを使用してください

RewriteRule /themes/(.*)$ /pm/themes/$1 [L]

しかし、何度も何度も書き換えられるため、今では無限の書き換えループがあります/pm/themes/..RewriteCondこれを防ぐには、除外する必要があります/pm/themes

RewriteCond %{REQUEST_URI} !^/pm/themes/
RewriteRule /themes/(.*)$ /pm/themes/$1 [L]

これで、リクエストは1回だけ書き換えられ、完了です。

于 2013-03-23T22:18:06.967 に答える
0

あなたはおそらくあなたの前に次の行を追加する必要がありますRewriteRule

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

要求されたファイルまたはディレクトリが存在しない場合にのみ、書き換えルールが評価されます。

.htaccessより良いアドバイスを提供できるように、ファイルを投稿する必要があります

于 2013-03-23T17:09:15.593 に答える