1

了解しました。タイトルは本当にずさんです。

ここに私の問題があります:私はニュースサイトを持っています、そしてあなたがメインページ()に行くとき、それはあなたの地理を理解した後にdomain.comあなたをリダイレクトします。domain.com/news/top?geography=San_Francisco

.htaccessを使用してから取得するにはどうすればよいdomain.com/news/top?geography=San_Francisco domain.com/San_Francisco/news/top ですか?

同様の質問がいくつかありますが、URLをさらに後方のサブディレクトリとして編集しているという点で十分に類似した質問は見つかりませんでした。

また、私はPHP用のCode Igniterフレームワークを使用しており、通常はそれを使用していますが、domain.com/index.php/news/top?geography=San_Franciscoを取り除くためにすでにmod_rewriteを実行していることにも注意してくださいindex.php。そのためのコードは次のとおりです。

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

私が試したコード:

RewriteRule ^([^/]+)/news/top$ /news/top?geography=$1 [L,QSA]
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
4

1 に答える 1

0

あなたが持っているindex.phpルールの前に、これを追加してみてください:

RewriteRule ^([^/]+)/news/top$ /news/top?geography=$1 [L,QSA]

生成するリンクがの形式であることを確認する必要がありdomain.com/San_Francisco/news/topます。


しかし、まだ古い方法のように見える野生のリンクを処理するには、実際の要求と照合する必要があります。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /news/top\?geography=([^&]+)
RewriteRule ^news/top$ /%1/news/top? [L,R=301]

domain.com/news/top?geography=San_Franciscoこれにより、誰かがリンクにアクセスしてブラウザのアドレスバーに次のように表示されるようにすると、ブラウザがリダイレクトされますdomain.com/San_Francisco/news/top。この時点で、ブラウザは2番目のURLに対する別のリクエストを送信します。上記のルールを使用して、クエリ文字列を含むURLに戻します。

于 2012-08-28T22:26:37.907 に答える