0

Web サイトの .htaccess を構成しています。

からのURLを書き換えたい

http://www.example.com/search/foo/bar/baz/ ... (任意の数のサブディレクトリ)

http://www.example.com/forms/index.php?i=foo--bar--baz-- ...

別のオプションは、すべての URL をリダイレクトすることです

http://www.example.com/search/foo/bar/baz/ ...

http://www.example.com/forms/index.php

そして、index.php に uri を解析させます。

上記の2番目の代替案を実装するために、次のmod_rewriteを試しました

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ /forms/index.php

しかし、404エラーが発生します。

注: 問題があるかどうかはわかりませんが、これは Wordpress サイトで発生しています。.htaccess全体は

Options +FollowSymLinks

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ /forms/index.php

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

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

ありがとう。

EDIT1:

私はいくつかの進歩を遂げました。RewriteRule の最後に [L] がありませんでした。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ /forms/index.php [L]

動作します。ここで、URL の /search を確認する必要があります。

EDIT2:

さらなる進歩:

RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^search/(.*)$ http://www.example.com/forms/index.php?i=$1 [QSA,L]

それは働いているようです。search/ の後にパラメーター i としてすべてを渡します。

ここで、元の URL をアドレス バーに表示したいと思います (書き直したものではありません)。それを行う方法はありますか?

ありがとう

4

2 に答える 2

1

効果のある何かが機能する
Rewrite ^(.*)$ forms/index.php?i=$1 [QSA,L]
はずです

ここでの重要な点は^(.*)$、任意の URL を選択してキャプチャし?i=$1、古い URL をクエリ文字列として配置することです。 QSA他の情報が渡された場合に備えて、古いクエリ文字列が追加されます。これが必要な場合とそうでない場合があります。

于 2013-10-26T19:39:55.680 に答える
1

404 エラーが発生する場合は、書き換えモジュールがオンになっていないか、.htaccess ファイルがまったく読み取られていない可能性があります。

これは正しくないようです:

RewriteRule !^index\.php$ /forms/index.php

書き換えエンジンの階層は、最初に見つかったルールが適用され、他はスキップされます。したがって、index.php を書き直さずに他のすべてを書き直したい場合は、Wordpress と同じように簡単に実行できます。

最初の行: RewriteRule ^index\.php$ - [L]<- index.php を "nothing" に書き換えます。

2 行目: RewriteRule .* /index.php [L]<- すべてを index.php に書き換えます。

したがって、リクエストが index.php の場合、Apache は次のように動作します: 最初の行をチェックします...読む時間がない!」

リクエストが index.php ではない場合、Apache は最初の行をチェックします... 2 行目をチェック...

于 2013-10-26T19:41:17.313 に答える