3

URL全体を取得するようにhtaccessルールを設定し、以下のルールを使用してインデックスファイルに転送するサイトがあり、すべてが正常に機能しています。

#################################
# Magic Re-Writes DO NOT CHANGE #
#################################
<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine on
  #RewriteBase /

  # Do Not apply if a specific file or folder exists
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  # The rules on how to rewrite the urls

  RewriteRule (.*) /index.php?url=$1 [QSA,L]
</IfModule>

したがって、以下のルールはhttp://mydomain.com/players/scoresheet/singlegameを転送します

http://mydomain.com/index.php?url=players/scoresheet/singlegame

ただし、URLの末尾のスラッシュを忘れている人に対応する必要もあります。これは通常は簡単なことですが、最後の文字が数値でない場合にのみ最後の末尾のスラッシュを強制できるようにする必要があります(または明らかにスラッシュ)。

たとえば、誰かが入力します。

http://mydomain.com/players/scoresheet/singlegame

ブラウザで次のように表示する URL が必要です: http://mydomain.com/players/scoresheet/singlegame/

それでも転送されます: http://mydomain.com/index.php?url=players/scoresheet/singlegame/

前述のように、これに対する例外は、最後の文字に既に末尾のスラッシュがある場合、または数字である場合です。

(それが理にかなっていることを願っています)

わかりました、これまでのところ私が持っているものは...

#######################################
#      Add trailing slash to url      #
#  unless last character is a number  #
#######################################

<IfModule mod_rewrite.c>
  RewriteEngine on
  Rewritecond %{REQUEST_URI} [^0-9/]$
  RewriteRule ^(.*)$ /$1/ [R=301,L]
</IfModule>

#################################
# Magic Re-Writes DO NOT CHANGE #
#################################
<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine on
  RewriteBase /

  # Do Not apply if a specific file or folder exists
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  # The rules on how to rewrite the urls

  RewriteRule (.*) /index.php?url=$1 [QSA,L]
</IfModule>

これに関する問題は、URLにスラッシュが追加されているように見えますが、index.phpも追加されるため、最終的には次のようになります。

訪問: http://mydomain.com/players/scoresheet/singlegame

URL を次のように書き換えます: http://mydomain.com/index.php?url=players/scoresheet/singlegame/

スラッシュが追加されますが、インデックス部分を表示せずに追加する必要があります。

私はさまざまな結果 (通常は完全な失敗またはループ) で、前後に移動しました。

どんな助けでもいただければ幸いです

4

1 に答える 1

2

あなたのルールは正しいですが、想定されていない場合でも盲目的にリダイレクトしています。上記の URL は、おそらく書き換え先の URL ではありません。あなたはそれを次のように持っています:

http://mydomain.com/index.php?url=players/scoresheet/singlegame/

しかし、私はそれが本当に次のようなものであると確信しています:

# note the slash here--------v
http://mydomain.com/index.php/?url=players/scoresheet/singlegame/

URI が内部的に書き換えられて にルーティングされた/index.php後、書き換えエンジンが再びループし、リダイレクトがそれをキャッチして にリダイレクト/index.phpするため/index.php/です。そのため、ルーティング ルールと同じ除外条件を追加する必要があります。

だから変更:

Rewritecond %{REQUEST_URI} [^0-9/]$
RewriteRule ^(.*)$ /$1/ [R=301,L]

次のいずれかに:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Rewritecond %{REQUEST_URI} [^0-9/]$
RewriteRule ^(.*)$ /$1/ [R=301,L]

また:

RewriteCond %{REQUEST_URI} !index.php
Rewritecond %{REQUEST_URI} [^0-9/]$
RewriteRule ^(.*)$ /$1/ [R=301,L]
于 2013-06-13T18:00:29.057 に答える