2017-08-22 3 views
1

正規表現やRewriteEngineについては、私は望めないので、今までの研究や試行の時間は今のところかなり無駄でした。この複雑なことをmod_rewriteでどうやって行うのですか?

私はこれらの規則に従います振る舞いを達成するためにRewriteEngineを使用しようとしている:

要求されたURLの場合...

  • は...例えば、既存のファイルを指しますdomain.com/existing_file.ext
    • には書き換え
  • しない...空である、または唯一例えばスラッシュ(ES)後続含まdomain.com/
    • 書き換えindex.php?var=example
  • に...(又は末尾スラッシュなし)ルートない例えば既存のディレクトリを指し示しますdomain.com/existing_directory
    • REQUESTED_DIRECTORY_PATHは(最後のスラッシュなしで、好ましくは常に)domain.com後のすべてですindex.php?var=REQUESTED_DIRECTORY_PATH/exampleに書き換え
  • に...空ではありませんが、既存のファイルまたはディレクトリ例えばを指していません。 REQUESTED_URLがすべてですindex.php?var=REQUESTED_URLからdomain.com/no_such_file_or_directory
    • 書き換え、domain.com

後これは私がこれまで持っているものです:

#/
RewriteRule ^$ index.php?var=example [QSA,L] 

# /directory_name/ 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$ /index.php?var=$0/example [QSA,L] 

# /not_a_valid_file_or_dir/ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^(.+)$ index.php?var=$0 [QSA,L] 

を私に思われます私がしたいときを除いて、ほとんど私が望むことをする。 domain.com/existing_directoryにアクセスしてください(末尾にスラッシュを付けてもしなくてもかまいません)。この場合、domain.com/existing_directory/(スラッシュ)にリダイレクトされますが、私はdomain.com/index.php?var=existing_directory/exampleになりたいと思います。

+0

URLを実際に '/ blah'から' /index.php?var = blah'に変更したいのですか? – Bananaapple

+0

@Bananaappleいいえ、URLは '/ blah'と表示され、内部リクエストは' /index.php?var = blah'になります。 – user6003859

+1

あなたのサンプルのhtaccessコードには、あなたの記述が '/ existing_directory'から'/existing_directory/'にリダイレクトされる何もありません。 htaccessファイルに他の指示がありますか? – Bananaapple

答えて

1

バナナアプリの役に立つコメントと、グーグルグリーグのおかげで、私は自分が望むものを達成することができました。

まず、DirectorySlash offを返さなければなりませんでした。次に、[^/]を正規表現から削除する必要がありました。最終的な関連コードは次のようになります。

DirectorySlash Off 

#/
RewriteRule ^$ index.php?var=example [QSA,L] 

# /directory_name/ 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+)$ /index.php?var=$0/example [QSA,L] 

# /not_a_valid_file_or_dir/ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^(.+)$ index.php?var=$0 [QSA,L] 

ありがとうございました。