0

私は本当にPHPで書かれた単純なサイトを持っていて、それを単一ページのHTMLのみのソリューションに書き直しました(#-sectionsを使用)。

ここで、代わりに、使用されていた古いクエリ文字列を新しいハッシュベースのURLにマップしたいと思います。これは、たとえば次の?id=itemAようになることを意味します#newAndImprovedItemA(古いIDは新しいハッシュと同じではありませんが、可能な値は4つしかないため、手動でマップするのはそれほど手間がかからないはずです)。どうやらこれは単純なRedirectPermanentでは機能しないようですが、私が理解していることから、RewriteRulesを使用する必要があります。残念ながら、私はそれについてまったく経験がないので、まだ適切に機能しているものを思い付くことができませんでした。

現在使用しているもの:

RewriteEngine on
RewriteCond %{QUERY_STRING}  ^id=itemA$
RewriteRule ^index.php$ /#newAndImprovedItemA [L]

これにより、新しいにリダイレクトされますがindex.html、ハッシュは追加されません。正直なところ、私はそのコードが何をすべきかについてあまり手がかりがないので、それはかなり離れているかもしれません(その場合は私に耐えてください)、それでも残念ながら私は人々が他の投稿に何を書いているのか理解できませんそのトピック。

index.php?id=itemAマッピングするだけの簡単な可能性は何でしょう#newAndImprovedItemAか?

4

2 に答える 2

1

ハッシュは純粋にクライアント側の操作です。リライトは、クライアントにまったく影響を与えることなく、Apache内部のみのリダイレクトのみを実行します。本格的なHTTP30xリダイレクトを強制する必要があります。

RewriteRule ^index.php$ /#newAndImprovedItemA [L,301]
                                                ^^^^

これはクライアントを往復します。これの欠点は、別のHTTPリクエストサイクルが必要になり、ユーザーのアドレスバーのアドレスを変更することです。

于 2012-04-10T14:15:16.787 に答える
1

私はこのhtaccessコードでそれを解決しました(少し汚いですが、完璧に動作します):

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteCond %{REQUEST_URI} !\.(?i)(jpg|png|gif|xml|json|css|js|php|html|htm)$
RewriteRule ^([^/]*)($|/)$ /test2/?$1#$1 [R,NE,L]
RewriteRule ^([^/]*)/([^/]*)($|/)$ /test2/?$1/$2#$1/$2 [R,NE,L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)($|/)$ /test2/?$1/$2/$3#$1/$2/$3 [R,NE,L]

「/test2」は、ローカルのWampテストドメインの目的のみを対象としています

結果の例:

http://localhost/test2/111 --> http://localhost/test2/?111#111
http://localhost/test2/111/ --> http://localhost/test2/?111#111
http://localhost/test2/111/222 --> http://localhost/test2/?111/222#111/222
http://localhost/test2/111/222/ --> http://localhost/test2/?111/222#111/222

これが解決策を見つけるのに数時間かかるので、これが役立つことを願っています。#サイトを使用していて、Facebookのオープングラフが必要な場合、これがこれまでのところ最良の解決策です。

さよなら

于 2015-05-13T19:18:31.707 に答える