3

誰かがこのコードを理解するのを手伝ってくれますか?

# Remove trailing ?
RewriteCond %{THE_REQUEST} ? HTTP [NC] 
RewriteRule .? /%{REQUEST_URI}? [R=301,L]

基本的に、www.example.com/index.cfm へのリンクを生成しているサイト www.example.com がありますか? SEO の複製目的で www.example.com にリダイレクトする必要があります。index.cfm をなんとか削除できましたが、? まだそこにとどまります (www.example.com/?)。末尾のスラッシュが最後の文字の場合は、問題なく削除されます。このルールをオンラインで見つけましたが、Apache で "RewriteCond: bad flag delimiters" というアラートが表示され、何もしません。

www.example.com/index.cfm?term=test のような検索用のページもいくつかあるので、クエリが添付されている場合ではなく、末尾の疑問符を取り除きたいだけです。

エラーは RewriteCond にあります。状態と、それに対する答えだけでなく、なぜそれが機能しないのかを理解する助けが必要です.

念のため、htaccess 全体を以下に示します。

RewriteEngine On
Rewritebase /

# remove trailing index.cfm
RewriteRule ^index.cfm(\?)?$ / [R=301,L]

# SEF URLs
SetEnv SEF_REQUEST false
RewriteRule ^[a-z\d\-]+/[a-z]\d+/? /index.cfm/$0 [NC,PT,QSA,E=SEF_REQUEST:true]
RequestHeader add SEF-Request %{SEF_REQUEST}e
RewriteCond %{HTTP:SEF_REQUES} ^true$ [NC]
RewriteRule . - [L]

# Remove trailing ?
RewriteCond %{THE_REQUEST} ? HTTP [NC] 
RewriteRule .? ^%{REQUEST_URI}? [R=301,L]

注: 投稿する前に online/stackoverflow を検索しましたが、問題の解決策が見つかりませんでした。

編集: また、RewriteRule ^index.cfm(\?)?$ / [R=301,L] が index.cfm を削除していることに気付きました何か (www.example.com/index.cfm?term=test) 誰かが私を訂正して EXPLAIN してくれたら、それは素晴らしいことです。ありがとうございます。

EDIT2: www.example.com/index.cfm?term=test&a=dh&j=dhjsi はリダイレクトしないでください。www.example.com/a/b/d/f/h/w/d はリダイレクトしないでください。www.example.com/index.cfm? www.example.com/index.cfm は www.example.com にリダイレクトする必要があります。

4

2 に答える 2

4
RewriteCond %{THE_REQUEST} ? HTTP [NC] 
RewriteRule .? ^%{REQUEST_URI}? [R=301,L]

?正規表現の予約文字であり、スペースと一緒にエスケープする必要があるため、機能しません。試す:

RewriteCond %{THE_REQUEST} \?\ HTTP [NC] 
RewriteRule ^/?(index\.cfm)? /? [R=301,L]

さらに、このルールは# remove trailing index.cfm、一番下ではなく、ルールの下にある必要があります。

于 2013-01-04T23:05:42.120 に答える
-1

1) Case 1: removing question mark

http://example.com/page/subpage/?YOURSTRING=blabla

to redirect to

http://example.com/page/subpage/

then in the beggining of .htaccess, insert:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} YOURSTRING=(.*)
RewriteRule ^(.*)$ /$1? [R=301,L]
</IfModule>

# if wordpres isnot installed in root folder, then edit the fourth line to this
# RewriteRule ^(.*)$ /YOUR-WORDPRESS-DIRECTORY/$1? [R=301,L]

2) Case 2: redirection from question mark to another link

http://example.com/index.php?YOURSTRING=blabla&id=44

to redirect to

http://example.com/page/subpage/

Use:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} YOURSTRING=blabla&id=44
RewriteRule ^(.*)$ http://example.com/page/subpage/? [R=301,L]
</IfModule>
于 2013-03-28T11:40:45.057 に答える