modules非表示にした際のポストリストページナビについて
永らくありがとうございました › フォーラム › その他 › modules非表示にした際のポストリストページナビについて
- このトピックには13件の返信、2人の参加者があり、最後に
匿名により13年、 4ヶ月前に更新されました。
-
投稿者投稿
-
2009 年 11 月 22 日 9:26 AM #2621
匿名
ゲストtoemon様
お世話になります。
たびたび別件にてご質問がございます。
現在、xoops、xpressME、wordpress全て最新バージョンで
新しいサイトの構築に挑んでおります。
xoopsサイトにつきものである、URLに表示される「modules」を非表示にしたく、
のぶのぶさんのサイトを参考に、
.htaccessの設定を行い非表示にすることができました。
xpressmeをinfoという名前にしてインストールしましたので、
という表示にすることができました。
ほかモジュールも問題なくリライトされているようです。
xpressMEのリンクが問題ないか、いろいろリンクしていたのですが、
xpressMEのトップページ(http://ドメイン名/info/)に表示されるページナビの
“前ページへ>>”リンクがおかしなことになってしまいました。
http://ドメイン名/info/modules/modules/info/?paged=2
modulesとinfoが重複されてしまうようです。
試しにhttp://ドメイン名/info/?paged=2でアクセスしたところ、
問題なく表示されました。
paged=2以降のページナビリンクは問題ないようです。
あくまでもxpressMEのトップページに表示されるナビだけの
現象のようです。
シングルページのナビは問題ありません。
解決方法があればご教授いただけますでしょうか。
宜しくお願いいたします。
2009 年 11 月 22 日 2:46 PM #2981toemon
キーマスターky982339さんこんにちは
xpressMEのトップページ(http://ドメイン名/info/)に表示されるページナビの
“前ページへ>>”リンクがおかしなことになってしまいました。
http://ドメイン名/info/modules/modules/info/?paged=2
modulesとinfoが重複されてしまうようです。
試しにhttp://ドメイン名/info/?paged=2でアクセスしたところ、
問題なく表示されました。
ページリンクはwordpressのnext_posts_link()やprevious_posts_link()を元にしていますので、integration Kitの方でどうのこうのは難しそうですが、とにかく再現してみないことにはなんとも言えないので
のぶのぶさんのサイトを参考に、
.htaccessの設定を行い非表示にすることができました。
で実際に設定された.htaccessの内容を提示お願いします。
また、もしモジュールのトップディレクトリに.htaccessがあるようならそちらも提示ください。
2009 年 11 月 23 日 2:14 AM #2982匿名
ゲストtoemon様
お世話になります。
ページリンクはwordpressのnext_posts_link()やprevious_posts_link()を元にしていますので、integration Kitの方でどうのこうのは難しそうですが、とにかく再現してみないことにはなんとも言えないので
このリライト自体、試行錯誤の産物のようなので
無理もないでしょうか。
ルートディレクトリにのみ、
以下の.htaccessを設定しております。
<code>AddHandler php5-script .php<br /> <br /> Options FollowSymLinks<br /> RewriteEngine on<br /> RewriteRule ^info/(.*)$ /modules/info/$1 [L]</code>
サーバーはhetemlを使っていますので、
AddHandler php5-script .phpと
Options FollowSymLinksの記述が必須のようです。
原因等お分かりになれば幸いです。
どうぞ宜しくお願いいたします。
2009 年 11 月 23 日 8:38 AM #2983toemon
キーマスター再現確認とれました。
WordPressの一般設定の「ブログのアドレス (URL)」の変更(RewriteRule で変更した URLにする)で対応可能かと思いますが、
チケット109の修正で変更できないようになってます。
このあたりの処理もう一度考えてみます。
とりあえずは、
/wp-content/plugins/xpressme/xpressme.phpの75,76をコメントアウトすることで、一時的な対応は出来ると思います。
<br /> //Site URL check<br /> //add_filter('option_home', "safe_site_url_filter");<br /> //add_filter('option_siteurl', "safe_site_url_filter");<br />
2009 年 11 月 24 日 2:27 AM #2984匿名
ゲストtoemon様
お世話になります。
/wp-content/plugins/xpressme/xpressme.phpの75,76をコメントアウトすることで、一時的な対応は出来ると思います。
こちを設定し、WordPressの一般設定の「ブログのアドレス (URL)」を
以下のように設定してみましたが変わりませんでした。
http://ドメイン/info
xpressMEトップに表示されるナビ(前ページへ »)に付加されるURL
http://ドメイン/info/modules/info/?paged=2
試しに、WordPressの一般設定の「WordPress のアドレス (URL)」も
http://ドメイン/info
に変更してみましたが、付加されるURLは変わりませんでした。
シングルポストナビは問題無いのですが、
ポストリストページナビの場合は上記のような症状が起こります。
2009 年 11 月 24 日 4:20 AM #2985toemon
キーマスターリンク
http://ドメイン/info/modules/info/?paged=2
から判断して、おそらく、トップページにhttp://ドメイン/modules/infoのURLでアクセスされたのではなかろうかと思います。
WordPressの一般設定の「ブログのアドレス (URL)」を
http://ドメイン/infoに設定して
xpressMEトップにhttp://ドメイン/infoではなくhttp://ドメイン/modules/infoでアクセスした場合には
xpressMEトップに表示されるナビ(前ページへ »)に付加されるURLは
http://ドメイン/info/modules/info/?paged=**
に
またその逆でWordPressの一般設定の「ブログのアドレス (URL)」を
http://ドメイン/modules/infoに設定して
xpressMEトップにhttp://ドメイン/modules/infoではなくhttp://ドメイン/infoでアクセスした場合には
xpressMEトップに表示されるナビ(前ページへ »)に付加されるURLは
http://ドメイン名/info/modules/modules/info/?paged=**
と、いずれも正常なリンクが作成されなくなります。
従って、http://ドメイン/infoでアクセスさせるのであれば、トップページへのアクセスURLもhttp://ドメイン/infoにしておく必要があります。
http://ドメイン/info、http://ドメイン/modules/infoどちらからのアクセスにも対応させるというのは難しいです。
2009 年 11 月 24 日 7:32 AM #2986匿名
ゲストtoemon様
従って、http://ドメイン/infoでアクセスさせるのであれば、トップページへのアクセスURLもhttp://ドメイン/infoにしておく必要があります。
http://ドメイン/info、http://ドメイン/modules/infoどちらからのアクセスにも対応させるというのは難しいです。
メインメニューからのリンク自体が
http://ドメイン/info/になっているので、
http://ドメイン/modules/infoでアクセスする(される)ことは
まず無いのではと思います。
今回起きている状況としまして、
1.
WordPress のアドレス (URL)、ブログのアドレス (URL)ともに
2.
WordPress のアドレス (URL)はhttp://ドメイン/modules/info、
ブログのアドレス (URL)のみhttp://ドメイン/infoに設定。
xoopsサイトトップのブロック、メインメニューから
モジュールトップ(http://ドメイン/info/)にアクセスすると、
ポストリストページナビ(前ページへ »)のurlは
http://ドメイン/info/modules/info/?paged=2と表示される。
※メインメニューのリンクはhttp://ドメイン/info/となっている。
http://ドメイン/info/?paged=2としてアクセスした際に表示される
ポストリストページナビ(« 次ページへ:前ページへ »)も同じように、
http://ドメイン/info/modules/info/ (« 次ページへ)
http://ドメイン/info/modules/info/?paged=3 (前ページへ »)
となってしまいます。
2009 年 11 月 24 日 8:20 AM #2987toemon
キーマスターまず先の投稿で、ドメイン名のところが実ドメイン **.netになっていた部分を
‘ドメイン名’に変更させていただきました。
つまりXOOPS側でRewriteRuleを変更しそのルールに従いWordPressの一般設定の「ブログのアドレス (URL)」を設定したけれど、
最初のページのページナビは正しいけれど、そのページナビから次のページに移った時のページナビがおかしいということですよね。
この現象はこちらは、当方では再現しません。
RewriteRule ^info/(.*)$ /modules/info/$1 [L]
を
RewriteRule ^info/(.*)$ modules/info/$1 [L]
にしても同じでしょうか?
2009 年 11 月 24 日 2:15 PM #2988匿名
ゲストtoemon様
RewriteRule ^info/(.*)$ /modules/info/$1 [L]
を
RewriteRule ^info/(.*)$ modules/info/$1 [L]
にしても同じでしょうか?
書き換えてみましたが同じ状態のままでした。
そのほかのリンクを全く問題ないのですが、
ポストリストページナビのみ重複したリンクが生成されてしまいます。
いっそうのこと、こちらのサイトでは
ポストリストページナビ自体を削ってしまおうかなと思います。
2009 年 11 月 25 日 2:19 AM #2989toemon
キーマスターえっと、気になる点が一つあるのですが、
のぶのぶさんのサイトを参考に、
とありますので多分、xoops のmainfile.phpも修正されているのですよね。
であれば、追加されたコード中で
$GLOBALS = array()リストに ’/info/’ が
$GLOBALS = array()リストに ’/modules/info/’ が
設定されているということはないでしょうか?
もし、設定されているのであれば、ky982339さんの言われている現象が発生します。
なぜならば、その追加したコードの最後の方に
<br /> $_SERVER = str_replace( $GLOBALS,$GLOBALS, @$_SERVER ) ;
とかいうのがありますが、
これっていうのは
$GLOBALS = array()リストと
$GLOBALS = array()リストにある、変換ルールによって
$_SERVERを変更している訳で、
もし、
$GLOBALS = array()リストに’/info/’があり
$GLOBALS = array()リストに ‘/modules/info/’を設定されていれば
http://ドメイン/info/でアクセスした場合の$_SERVERは
’/info/’ から
’/modules/info/’ に、
改変され、
WordPressから見ると
http://ドメイン/info/ でリクエストされたのではなく、
http://ドメイン/modules/info/ としてリクエストされたことになってしまうからです。
そうなると
WordPressの一般設定の「ブログのアドレス (URL)」を
http://ドメイン/infoに設定して
xpressMEトップにhttp://ドメイン/infoではなくhttp://ドメイン/modules/infoでアクセスした場合には
xpressMEトップに表示されるナビ(前ページへ »)に付加されるURLは
http://ドメイン/info/modules/info/?paged=**
に
またその逆でWordPressの一般設定の「ブログのアドレス (URL)」を
http://ドメイン/modules/infoに設定して
xpressMEトップにhttp://ドメイン/modules/infoではなくhttp://ドメイン/infoでアクセスした場合には
xpressMEトップに表示されるナビ(前ページへ »)に付加されるURLは
http://ドメイン名/info/modules/modules/info/?paged=**
と、いずれも正常なリンクが作成されなくなります。
が成立します。
2009 年 11 月 25 日 4:49 AM #2990toemon
キーマスター追記、
ちょいと「さくらのテストサイト」で確認してみました。
(こちらは XPressME Integration Kit Ver2.20RC2を使ってます)
一応パーマリンクなんかも日付ベースに変更したりしてみましたが、問題はなさそうです。
ただ、カテゴリーリストのALLを選択した場合ではhttp://ドメイン/modules/infoとかいう(最後に/のない)リンクを返すので、エラーになることがありますので
.httaccessに
RewriteRule info$ module/info/ [L]
なんかを置いておくのもよいでしょう.
メインメニューとモジュールサブメニューはどうにもならないのでテンプレート側ででリンク修正を行っています。
2009 年 11 月 25 日 9:18 AM #2991匿名
ゲストtoemon様
検証していただきありがとうございます。
$GLOBALS = array()リストに ’/info/’ が
$GLOBALS = array()リストに ’/modules/info/’ が
設定されているということはないでしょうか?
まさにその通りでございます。
WordPressから見ると
http://ドメイン/info/ でリクエストされたのではなく、
http://ドメイン/modules/info/ としてリクエストされたことになってしまうからです。
なるほど。
となると、そもそも
$GLOBALS = array(
‘/info/’,
);
$GLOBALS = array(
‘/modules/info/’,
);
という記述が間違っているということでしょうか。
ちょいと「さくらのテストサイト」で確認してみました。
拝見させていただきました。
おぉ~、トップに表示されるナビ(前ページへ »)のリンクも
正常ですね。
2009 年 11 月 25 日 12:55 PM #2992toemon
キーマスターとなると、そもそも
$GLOBALS = array(
‘/info/’,
);
$GLOBALS = array(
‘/modules/info/’,
);
という記述が間違っているということでしょうか。
はい、XPressMEに限って言えば、基本的には.htaccessのRewriteRuleと、WordPress一般設定ブログのアドレス (URL)の変更だけでmainfile.php側への追記は必要ありません。
(が、後述するさくらテストサイトでの設定では、せっかく追加したコードなので、他のモジュールとは逆の使い方で利用したりしています。)
mainfile.phpに追加されたコードは、大まかに言うと、内部のモジュールが
$_SERVERや$_SERVERが.htaccessのRewriteRuleで変更されてしまうと、動作しないモジュールの為に、
http://ドメイン/モジュールディレクトリ名/
でリクエストされても、
http://ドメイン/modules/モジュールディレクトリ名/
でリクエストされたように見せかけるために、追加されているものです。
WordPress のブログのアドレス設定も、内容的には少しちがいますが、同じような働きをします。
ですから、XPressMEの、WordPress のブログのアドレス設定をhttp://ドメイン/infoに設定している場合は .htaccessのRewriteRule設定だけで、Mainfile.phpによる$_SERVERや$_SERVERの変更は必要ありません。
参考までに「さくらのテストサーバー」での設定を後述しておきます
、
XPressME モジュールディレクトリ xpress として
.httaccess
<br /> RewriteEngine on<br /> RewriteRule xpress$ xpress/ [L]<br /> RewriteRule ^xpress/(.*)$ modules/xpress/$1 [L]<br />
mainfile.phpへの追記
<code>$GLOBALS['_rewriteRulesFrom'] = array('/modules/xpress/');<br /> $GLOBALS['_rewriteRulesTo'] = array('/xpress/');<br /> $GLOBALS['_abs_offset'] = preg_replace('/https?://'.$_SERVER["HTTP_HOST"].'/','',XOOPS_URL);<br /> $GLOBALS['_rewriteRulesTo1'] = preg_replace('/^(.*)$/e','"!('.XOOPS_URL.'|"".$GLOBALS["_abs_offset"]."|'".$GLOBALS["_abs_offset"].")".preg_quote("1","!")."!"', $GLOBALS['_rewriteRulesTo']);<br /> $GLOBALS['_rewriteRulesFrom1'] = preg_replace('/^(.*)$/','\11',$GLOBALS['_rewriteRulesFrom']);<br /> <br /> function modules_changer( $s ) {<br /> $s = preg_replace($GLOBALS['_rewriteRulesTo1'],$GLOBALS['_rewriteRulesFrom1'], $s);<br /> for($i=0; $i<count($GLOBALS['_rewriteRulesFrom']); $i++) {<br /> $s = preg_replace( '/('.preg_quote(XOOPS_URL,'/').'|"|')'.preg_quote($GLOBALS['_rewriteRulesTo'][$i],'/').'/' , "\1".$GLOBALS['_rewriteRulesFrom'][$i] , $s ) ;<br /> }<br /> return $s;<br /> }<br /> if (empty($_SERVER['REDIRECT_URL']) || ($_SERVER['REDIRECT_URL'] == $_SERVER['REQUEST_URI'])) {<br /> if (empty($_SERVER['REDIRECT_REDIRECT_STATUS'])) {<br /> if (($_changer_url=modules_changer('"'.$_SERVER['REQUEST_URI'].'"')) != '"'.$_SERVER['REQUEST_URI'].'"') {<br /> // if request url is old url redirect to new<br /> header('Location: ' . str_replace('"','',$_changer_url));<br /> }<br /> }<br /> }<br /> $_SERVER['REQUEST_URI'] = str_replace( $GLOBALS['_rewriteRulesFrom'],$GLOBALS['_rewriteRulesTo'], @$_SERVER['REQUEST_URI'] ) ;<br /> $_SERVER['HTTP_REFERER'] = str_replace($GLOBALS['_rewriteRulesFrom'], $GLOBALS['_rewriteRulesTo'], @$_SERVER['HTTP_REFERER'] ) ;</code>
ここで、
$GLOBALS = array(‘/modules/xpress/’);
$GLOBALS = array(‘/xpress/’);
の部分は他のモジュールとは逆に
http://xpress.sakura.ne.jp/modules/xpress/
でリクエストされたときでも
http://xpress.sakura.ne.jp/xpress/
でリクエストされたように見せかけるために使ってみました。
WordPress一般設定ブログのアドレス (URL)
http://xpress.sakura.ne.jp/xpress
テンプレートlegacy_block_mainmenu.html
<code><table cellspacing="0"><br /> <tr><br /> <td id="mainmenu"><br /> <a class="menuTop" href="<{$xoops_url}>/"><{$smarty.const._MB_LEGACY_HOME}></a><br /> <{foreach item=module from=$block.modules}><br /> <{if $module.directory == 'xpress'}><br /> <a class="menuMain" href="<{$xoops_url}>/<{$module.directory}>/"><{$module.name}></a><br /> <{foreach item=sublink from=$module.sublinks}><br /> <a class="menuSub" href="<{$sublink.url|replace:"modules/xpress":"xpress"}>"><{$sublink.name}></a><br /> <{/foreach}><br /> <{else}><br /> <a class="menuMain" href="<{$xoops_url}>/modules/<{$module.directory}>/"><{$module.name}></a><br /> <{foreach item=sublink from=$module.sublinks}><br /> <a class="menuSub" href="<{$sublink.url}>"><{$sublink.name}></a><br /> <{/foreach}><br /> <{/if}><br /> <{/foreach}><br /> </td><br /> </tr><br /> </table></code>
としております。
2009 年 11 月 26 日 1:00 AM #2993匿名
ゲストtoemon様
お世話になります。
最後までお付き合いいただき感謝いたします。
$_SERVERや$_SERVERが.htaccessのRewriteRuleで変更されてしまうと、動作しないモジュールの為に、
http://ドメイン/モジュールディレクトリ名/
でリクエストされても、
http://ドメイン/modules/モジュールディレクトリ名/
でリクエストされたように見せかけるために、追加されているものです。
なるほど。モジュールによってそのあたりの仕様が違うんですね。
テンプレートlegacy_block_mainmenu.html
メインメニューの修正コードまでいただき
ありがとうございます。
実は、以前までの.htaccess、mainfile.phpによるリライト設定だと、
設定後に、モジュールを新規でインストールできなくなるという
不具合があったのですが、このたび教えていただいた方法で、
この不具合も解消されました。
今回のスレッドについては、xpressMEに関することと、
ややずれていたことをお詫び申し上げます。
ただ、xoopsユーザーは意外とこの“modules”表示を消したいと
思っているのではないかと思います。
以前、某xoopsフォーラムでも同じような話題があり、
最終的にしっくりする解決には至らなかったのですが、
そのスレッドの閲覧数は通常の倍以上ありました。
今回いただいた情報は、そんなxoopsユーザーの悩みを
解決してくれる思います。
どうもありがとうございました。
-
投稿者投稿
- このトピックに返信するにはログインが必要です。