2016-10-29 3 views
0

ここで私の問題に対する答えを探しましたが、解決方法は説明されていないまま解決策が提供されるため、正しくできません。オプションのパラメータを.htaccessで指定する

私はこのコードを持っている:

RewriteRule ^dex/([^_]*)/([^_]*)/([^_]*)/([^_]*)/([^_]*)$ /dex.php?one=$1&two=$2&three=$3&four=$4&five=$5 [L] 

このhtaccessファイルを、それが必須すべてのパラメータが与えられていることになりされます。このURLは動作します:

http://example.com/dex/one/two/three/four/five

私もそれがこのように動作するようにしたい:オプションの最後の(または一部)のパラメータを作る

http://example.com/dex/one/two/three/four

。私はここQSA | qsappendについて何かを読んだ:http://httpd.apache.org/docs/current/en/rewrite/flags.html#flag_qsaしかし、私はそれを完全に理解することはできません。

助けが必要ですか?ありがとうございます

+0

4つの値を受け取った場合、どの値が不足しているかをどのように知ることができますか? –

答えて

0

書き換えルールは正規表現を使用します。これらの正規表現は、常に面倒でメンテナンスが難しいです。以下では、例えば、正規表現のHTMLパーサに、そしてあなたがそれらを見つけることが困難についての質問への答えです:

RegEx match open tags except XHTML self-contained tags

あなたのhtaccessファイルは、Apacheの設定ファイルです。これはプログラミングのためではなく、シンプルな設定に使用する必要があります。コードを指し示してから、コードが残りの部分を行うようにしてください。たとえば、あなたの.htaccessファイル:

RewriteRule ^(.*)$ index.php [QSA,NC,L] 

そして、あなたがindex.phpを持つPHP ...

$objects = explode('/', ltrim($_SERVER[REDIRECT_URL], '/')); 

print_r($objects); // list of items from URL 

を使用している場合は、別のサーバーパラメータをつかむしたい終わるかもしれないが、この複雑なものをコードに保存し、設定ファイルに保存しないでください。同じ問題を持つ人には

0

が、これはそれを修正するために使用するコードです:

RewriteRule ^dex/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?([^/]*)?$ /dex.php?one=$1&two=$2&three=$3&four=$4&five=$5 [L] 

([^/]*)([^_]*)を変更し、私はオプションにするために何を望むか後?を追加しました。

この場合、/?は終了スラッシュをオプションにし、([^/]*)?は最後のパラメータをオプションにしています。 URLが次のようなときに機能します:

http://example.com/dex/one/two/three/four/ 

http://example.com/dex/one/two/three/four 

http://example.com/dex/one/two/three/four/five 

http://example.com/dex/one/two/three/four/five/ 

これは誰かに役立つことを望みます。

関連する問題