Joomla 3.3.6
(編集:3.5.
)サイトが3つのレベルでのみ構成されています。
Search Engine Friendly URLs
、Use URL rewriting
、Adds Suffix to URL
およびmultilanguage support
を設定した後のURL
、should次の形式である:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
しかし、Joomlaをインストールしていて、Joomla-Baby-Version以降に解決策を求めている他の多くの人と同じように、私は次のようになりました。
http://www.example.com/en/bigcatiii/666-intercatA/articlex.html
ここで、666は、目的のないカテゴリIDを示す地獄の数字です。
今答えを探して、私はこの答えを見つけました:
Edit “components/com_content/router.php“
(You’ll probably have to re-do this step every time you update Joomla.)
Replace the lines 38 and 290 with:
$advanced = $params->get('sef_advanced_link', 1);
and Replace line 426 with
->where($db->quoteName(‘alias’) . ‘ = ‘ . $db->quote($segment));
さて、まず第一に、426行目はすでにオリジナルのそれと同じです。第二に、これはトリックを行いません。それはで動作します:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
しかし、以下を参照すると、404エラーが発生します。
http://www.example.com/en/bigcatiii/intercatA.html
また、[〜#〜] id [〜#〜]の数値が異なることに気づきました。 URL全体が
http://www.example.com/en/bigcatiii/666-intercatA/articlex.html
同じカテゴリの説明ページは
http://www.example.com/en/bigcatiii/333-intercatA.html
。htaccessに基づいて、より良く聞こえるが機能しない別の解決策もあります
RewriteEngine on
RewriteBase /
RewriteRule (\d+)-([^/]*) $2 [R=301,L]
URLs
は問題ないように見えますが、ページが見つかりません。 Joomlaコアを変更する代わりに。htaccessを使用してソリューションを提供できれば、はるかに良いでしょう。
それでも、この他のgoogledの提案が有効であれば、Joomlaコアを変更しても問題ありません。
Copy “components/com_content/router.php” to “/templates/your-template/html”
つまり、router.php
を「ローカル」に移動すると、アップグレード後にすべてをやり直す必要がなくなります。 (もちろん、router.phpが更新されていない限り、もう一度ミラーリングしたほうがよいでしょう。)
このパズルを解くためにあなたの時間をありがとう!
参照
編集(2016年5月2日):Joomlaの新しいバウンティ最終バージョン3.5
Joomla 3.5を新しくインストールしましたが、古い方法で問題ありません。ルーターファイルで何かが変更されているため、joomlaのアップグレード後に手順を繰り返す必要があります。
./components/com_content/router.php
の行は34行と295行になりました。
再び0
を1
に変更して、次のようにします。
$advanced = $params->get('sef_advanced_link', 1);
私のURLは例: http://joomla.lan/en/category-en-gb/article-en-gb
は、Search Engine Friendly URLs
をオンにすると正常に動作します。
Adds Suffix to URL
をYes
に切り替えると、.html
がURLに追加されます。Use URL Rewriting
およびUnicode Aliases
はオプションで機能します。 IIS7またはApacheでURL書き換えエンジンを使用する場合は、htaccess.txt
の名前を.htaccess
に、webconfig.txt
の名前をwebconfig
に変更する必要があります。一部のホスティング業者は、サーバー構成が制限されていることに注意してください。 500 internal server error
を取得した場合は、.htaccess
を編集し、前に追加してOptions +FollowSymlinks
および/またはOptions -Indexes
および/またはRewriteBase /
の行をコメントアウトする必要があります。 #
。後者はJoomla3.5ですでに無効になっています。 RewriteBase
設定は、JoomlaがWebルートではなくサブフォルダーにインストールされている場合に役立ちます。
他のサーバーでは、Use URL Rewriting
をNo
に設定します。
私はあなたの問題を再現することはできません、これらの2つのコード編集ですべてが正しく機能しています。もう一度試してみてください。解決できない場合は、正確な動作(URL、エラーも同様)を投稿してください。修正できない場合は、ソースを再インストールする必要があります。
それを調べた後、私はいくつかの有用な情報を見つけました。 [〜#〜]免責事項[〜#〜]私はJoomlaを使用しておらず、動作中のインストールでこれを試していません。これらは結果にすぎません。いくつかの検索と読み取りのソースコードの。とにかく、これが私が見つけたものです。
私が集めたものから、変化しているようです
_$advanced = $params->get('sef_advanced_link', 0);
_
に
_$advanced = $params->get('sef_advanced_link', 1);
_
十分なはずです。 ただし、に注意してください。このオプションを使用すると、おそらく両方のURL(IDありとなし)が使用可能になり、SEOには適していません。問題は404にありますが、それはJoomlaルーティングシステムの問題のようです。構成されているだけで使用されていないメニューリンクを使用して、404を補正できます(以下を参照)。
あなたの問題のいくつかの起源:
Line ~385 // We get the category id from the menu item and search from there
_)を検索します。Line ~425 ->where($db->quoteName('catid') . ' = ' . (int) $vars['catid'])
)$query['catid']
_が削除されます(行〜69)したがって、1つの解決策は次のことを行うことです。
カテゴリごと、記事ごとにメニュー項目を作成してみてください。メニューがどこにも表示されず、管理インターフェースでのみ構成されている場合でも、Joomlaが適切な記事/カテゴリを見つけられるように、カテゴリと記事のグローバルな一意のルーティングエイリアスが作成されます。私の理解では、カテゴリまたは記事にメニュー項目がある場合、タイトルエイリアスのみが使用されます。ただし、リソースがないため、idとslugの組み合わせを使用してリソースを検索します。
多くの人がこれについて不平を言っているので、それはJoomla 3.5で修正されるべきです
参考資料とディスカッション:
明るいメモで締めくくるには、 開発者は制限を認識しています ;)のようです。