1

Stack Exchange での mod_rewrite と mod_alias を使用した Apache の構成に関連する問題はたくさんありますが、私の問題に対する答えが見つからなかったので、別の質問です! ;)

古いウェブサイトを新しい場所に移行しました。

以前は などの URL から記事にアクセスできるようにhttp://xxx/blog/index.php?post/YYYY/MM/DD/titleなっていたため、既存の Web ページを介してその形式のリンクが多数存在します。

これで、URL は になるはずなので、最終的な URL からhttp://xxx/post/YYYY/MM/DD/title削除するだけです。blog/index.php?

mod_alias と句を使用したかったのですが、句が句の後に解釈されることをここRedirectで読みました。これは、既に条件を使用しているため、私の場合は問題です。RedirectRewriteRuleRewriteRule

これが私の現在の.htaccessファイルです:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1

このように変更しようとしました:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^blog/index.php? / [R=301,L]
RewriteRule ^(.*)$ index.php?$1

以下を除いて、ほとんど機能します。

  1. http://xxx/blog/index.php?post/YYYY/MM/DD/titlehttp://xxx/blog/?post/YYYY/MM/DD/title( に注意)にリダイレクト/書き換えられる?ため、機能しません
  2. この新しい行は、/blog/index.php で始まらない他の多くの URL を台無しにしているように見えますか? バックエンド URL など...

どんな助けでも大歓迎です!

編集 (2014-07-16):

次のルールを使用する場合:

RewriteRule ^/?blog/index\.php(.*)$ /$1 [R=301,L]

次に、 ほぼ正しいものhttp://xxx/blog/index.php?test に移動します http://xxx/?test (尋問マークはまだ問題です)!

しかし、追加して尋問マークを一致させようとすると、次のようになり\?ます。

RewriteRule ^/?blog/index\.php\?(.*)$ /$1 [R=301,L]

その後、機能しなくなります...そこに行く: http://xxx/blog/index.php?test ただ私をそこに残してください!

何故ですか?

4

1 に答える 1

0

このルールを一連のルールの先頭に追加してみてください。

RewriteCond %{THE_REQUEST} \?post/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^&\ ]*)
RewriteRule ^index\.php$ /post/%1/%2/%3/%4? [L,R=301]

次のようになります。

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} \?post/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^&\ ]*)
RewriteRule ^index\.php$ /post/%1/%2/%3/%4? [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1
于 2014-07-15T16:11:00.247 に答える