0

wordpress ネットワーク サイトで htaccess の問題を解決しようと頭を悩ませていましたが、過去に stackoverflow から非常に多くの情報を得たので、これが質問するのに最適な場所だと思いました。そして、私が正しく投稿していない場合は、前もってお詫び申し上げます。初めてです。

ここに私のセットアップの詳細があります(ある種のNDAに同意しているため、サイトへのアクセスを表示または許可することはできません)

  1. 2サイトあります。1 つ目はルート サイト "/" で、2 つ目は "/mythoughts/" です (ネットワーク管理者に表示)。
  2. 「/mythoughts/」サイトは、誰かが作成した、URL に変数を使用する古いカスタム ブログ (カスタム) の代替です。
  3. 私が使用しているテーマは 20 と roots です (明らかに、roots はネットワーク設定上できちんとした URL の書き換えを行いません)

問題はこれです。

最初の「index.php が URL から削除されています (問題ではありませんが、他の書き換えを行うと問題が発生する可能性があると思います。)

次に、古いサイトには 2 つのインスタンスの URL に変数があります。

最初のインスタンスはこれです

www.thesite.com/mythoughts/index.php?year=2010&month=9

私は次のように書き直す必要があります

www.thesite.com/mythoughts/2010/9

まず index.php が自動的に削除されます

私は非常に多くの異なることを試しました

RewriteRule ^mythoughts/index.php?year=(.*)&month=(.*)$ mythoughts/$1/$2 [R=301,L]

動作しません

2番目のインスタンスはこれです

www.thesite.com/mythoughts/index.php?thought=101

に書き換える必要があります

www.thesite.com/mythoughts/title-of-the-post

url 変数を投稿のタイトルに一致させる (および無効な文字を置き換える) ことができるスクリプトがありますが、書き換えは機能しません。

ここに私が現在持っているhtaccessがあります(裸のワードプレス)

# BEGIN WordPress
<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
    RewriteRule . index.php [L]



</IfModule>

#END WordPress

誰かがこの htaccess の全体 (私がここ数週間苦労してきたこと) について正しい方向に私を向けるのを助けることができれば、私は完全に素晴らしいでしょう.

よろしくお願いします。

4

2 に答える 2

0

スタック(素晴らしい)オーバーフローに質問を投稿したにもかかわらず、検索を続けた後

これが私が最終的に得たものです。

二重のURL文字列を使用した最初のインスタンスでは、答えは

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /mythoughts/index\.php\?year=([0-9\-]+)&month=([0-9\-]+)\ HTTP/ [NC]
RewriteRule ^index\.php$ http://site.co.uk/mythoughts/%1/%2? [R=301,L]

最初のURLは

www.site.co.uk/mythoughts/index.php?year=2010&month=12

書き換え結果は

www.site.co.uk/mythoughts/2010/12/

完全 !!!!

2 番目のインスタンスでは、最初に Jons の質問に答えます。

スクリプトは php で書かれており、URL 変数の ID から古いデータベースの連結文字列をスキャンします。たとえば、以下の URL の変数です。

www.site.co.uk/mythoughts/index.php?though=21

この投稿またはデータベース エントリにはタイトルがあり、ワードプレスではタイトルがパーマリンクで使用されます

そうなるだろう

www.site.co.uk/mythoughts/sublime-and-powerful-outcomes

スクリプトは、書き換えの最初の条件の ID を取得し、その ID をその場所に配置します。2 番目の部分は、投稿のタイトルを取り、ダッシュと特殊文字を削除してスペースを入れ替えます。

その結果、新しい URL が生成されます。

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /mythoughts/index\.php\?thought=21
\ HTTP/ [NC]
RewriteRule ^index\.php$ http://site.co.uk/mythoughts/sublime-and-powerful-outcomes? [R=301,L]

これに答えるために時間を割いてくれたジョンに感謝します。

これが誰かを助けることを願っています

于 2012-09-30T21:10:23.030 に答える
0

最初の例では、次のものがあります。

RewriteRule ^mythoughts/index.php?year=(.*)&month=(.*)$ mythoughts/$1/$2 [R=301,L]

ただし、書き換えルールでクエリ文字列と照合することはできません。また、書き直すルールがあるので、リダイレクト ループを作成するだけです。URI ではなく、実際のリクエストと照合する必要があります。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /mythoughts/index\.php\?year=([^&]*)&month=([^&\ ]*)
RewriteRule ^ mythoughts/%1/%2 [R=301,L]

はどうかと言うと:

url 変数を投稿のタイトルに一致させる (および無効な文字を置き換える) ことができるスクリプトがありますが、書き換えは機能しません。

おそらく、ルールまたはスクリプトを含めた場合、htaccessにスクリプトが表示されません。

于 2012-09-30T19:08:21.373 に答える