最終編集:私はこれを理解したようです!以下に答えてください。
編集 2: Apache は一般的に後部の大きな問題だと思いますが、実稼働 Web サーバーを Litespeed (独自の apache) から nginx に切り替える立場にはありません。これらの URL は問題なく解決されます。しかし、ええ、メモとして-これはnginxで問題なく動作します。
編集 3:次の RewriteRule は、私を助けようとした freenode の友好的な仲間からこれまでのところ理解されています。
RewriteRule ([^#]+)#([^#]+) /index.php/$1¦$2 [L,QSA,NC]
このクレイジーな月言語の正規表現がいかにクールに見えても、ハッシュが含まれる URL に対してのみ機能し、それ以外は無効になります。これらの RewriteRules が 404 などの場合にフォールバックする方法はありますか?
編集 4:誰かが提案した:
FallbackResource /index.php
運もありません。
元の質問:
私は、アイテムのタイトルから派生した URL を持つ特定の URL を持つサイトで作業しています (タイトルの例として、thisUrlDerivedFromUrl - #example )、次のようになります。
http://example.com/listen/thisUrlDerivedFromItemTitle+-+%23example-mid26372
ただし、これにより次の 404 エラー ページが表示され、%23 としてエンコードされた # でリクエストが途切れていることがわかります。
Error 404
Unable to resolve the request "listen/thisUrlDerivedFromItemTitle+-+"
明確にするために、私は、派手にエスケープされた AJAX URL や、Google で解決策を探したときに表示されるようなものを探しているわけではありません。これは単に、この特定のサイトにある特定の既存のアイテムの束の問題であり、URL に # 文字が存在するために解決されていません。これは、アイテムのタイトルから派生した値であり、人々が好きな場所です。どこにも行かないハッシュタグを投げたり、アップロードされたアイテムのタイトルに「私は#1です」のようなものを投げたりします。
ここにキッカーがあります -- Yii には、スクリプト名 (index.php) を非表示にするオプションがあります。
showScriptName => 'false'
config/main.php のディレクティブ。サイトの運営者によると、これはサイトの望ましい動作です。ただし、ハッシュを含む URL はそれがないと機能しないため、現時点では showScriptName を無効にしています。これにより、URL はすべて次のようになります。
http://example.com/index.php/listen/thisUrlDerivedFromItemTitle+-+%23example-mid26372
問題は、この URL 形式が問題なく解決され、404 の混乱などがないことです。私の雇用主はこの妥協に満足しているとは思わない.
私の .htaccess と、私の urlManager 配列が config/main.php でどのように見えるかを提供します。これは、誰かがこの問題の解決策を見つける最後に何らかの答えを持っていることを期待しています. 解決策を探すために私が共有できるアイデアやその他のものは役に立ち、事前に感謝します:)
.htaccess:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]
config/main.php の urlManager 配列:
'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => true,
'rules' => array(
'user/<_a:(register|update|forgottenpassword)>' => 'user/<_a>',
'user/<username>' => 'user/view','user/<username>/<_a>' => 'user/<_a>',
'listen/<title>-mid<id>' => 'mixtape/listen'),
),
編集:どうやらこれらの URL は、私が行って htaccess ファイルを作成する前に正常に機能していたようです。これは、以前の化身では、opengraph の静的画像ファイル リンクにアクセスできる Facebook を作成していました。私は、バックアップを使用してテストすることに基づいて、以前は正常に機能していたというこの主張に異議を唱えます-古いhtaccess&codeに戻すと、zilchが実行されます。ただし、参考までに以下に示します。
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://example.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://example.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.example.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.example.com$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp|mp3|zip)$ - [NC,F,L]
RewriteBase /
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
# otherwise forward it to index.php
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.* - [F,L]
RewriteRule ^.*$ index.php [NC,L]