1

読み取るようにしましたが、URL に追加するときにカスタム値.htaccessを読み取らないようになりました。$_GET['ht'] AND $_GET['hht'] as /ht/hhtたとえば、mydomain.com/ht/?smth=elseそれは読みません$_GET['smth']。どうすればそれを変更できますか?

私の.htaccess

<IfModule mod_rewrite.c>
  RewriteEngine on
    RewriteBase /

  RewriteCond %{REQUEST_FILENAME} -f [OR]
  RewriteCond %{REQUEST_FILENAME} -d
  RewriteRule .* - [L]

  RewriteRule ^([a-zA-Z0-9-z\-]+)/([a-zA-Z0-9-z\-]+)$ index.php?ht=$1&hht=$2
  RewriteRule ^([a-zA-Z0-9-z\-]+)/([a-zA-Z0-9-z\-]+)/$ index.php?ht=$1&hht=$2
  RewriteRule ^([a-zA-Z0-9-z\-]+)$ index.php?ht=$1&hht=$2
  RewriteRule ^([a-zA-Z0-9-z\-]+)/$ index.php?ht=$1&hht=$2
</IfModule>

<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>


<Files .htaccess>
order allow,deny
deny from all
</Files>
4

1 に答える 1

2

に余分な「-z」がありますREGEX。また、最後の 2 つのルールは統合できます。また、パターンにない 2 番目の REGEX で変数を宣言しています。括弧のセットが 1 つしかなく、文字列の先頭と末尾を再帰なしで照合しているため、$2は作成されません。

変数を保持するには、RewriteRule QSA|qsappendを使用します

置換 URI にクエリ文字列が含まれている場合、RewriteRule の既定の動作では、既存のクエリ文字列が破棄され、新しく生成されたクエリ文字列に置き換えられます。[QSA] フラグを使用すると、クエリ文字列が結合されます。

一致したルールの処理を停止するには、RewriteRule L|lastを使用します

.htaccess ファイルまたはセクションで RewriteRule を使用している場合は、ルールがどのように処理されるかをある程度理解しておくことが重要です。これを簡略化すると、ルールが処理されると、書き換えられたリクエストが URL 解析エンジンに返され、可能な処理が行われます。書き換えられた要求が処理されると、.htaccess ファイルまたはセクションが再び検出され、ルールセットが最初から再実行される可能性があります。最も一般的なのは、ルールの 1 つがリダイレクト (内部または外部のいずれか) を引き起こし、リクエスト プロセスが最初からやり直された場合です。

RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ index.php?ht=$1&hht=$2 [QSA,L]
RewriteRule ^([a-zA-Z0-9-]+)/?$ index.php?ht=$1 [QSA,L]
于 2013-04-28T16:34:33.407 に答える