1

docsルートにフォルダーがあるphp Webサイトがあります。サイトの構造は次のとおりです。

sitename.com/docs/

docs フォルダーには、名前にスペースが含まれているためにブラウザーの問題を引き起こすことがある PDF があるため、(主に IE によって) 検出されません。

私がやりたいことは次のとおりです。

ディレクトリに壊れた URL がある場合は常にdocs/、クエリ文字列全体を docs ディレクトリ内の php ページにリダイレクトしたいと思いますが、PDF の名前はそのままにしておく必要があります。

したがって、URL は次のとおりです。

website.com/docs/this is a pdf

私はそれをにリダイレクトしたい:

website.com/docs/index.php?pdf=this is a pdf

そこから、PDFparamを取得して修正し、要求を正しいファイルに送信できます。

これがストレートで行われない理由.htaccessは、動的なソリューションを見つけることができないためです。つまり、PDF の単語数は可変であり、スペースで区切られた 1 ~ 20 単語になる可能性があります。

私はこのSO投稿でそれについて投稿しましたが、1つの返信がありましたが、それでも可変URL長の問題には対処していません.

このチュートリアルの例からこれをもう一度試しましたが、これを適切に行う方法を理解できないため、まったく役に立ちませんでした。

私が近いと思うのは、次のコードです。

RewriteEngine on
RewriteRule ^docs/(.*) /index.php?pdf=$1 [NC]

私は近いですか?

4

2 に答える 2

2

まず、.htaccess に記述できるのは静的コードのみであり、動的コードを処理することはできないことを知っておく必要があります
。次の解決策は、テストされていない場合に役立つ場合があります。

RewriteEngine on
RewriteRule ^docs/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ /index.php?pdf=$1 [L]

于 2013-08-27T11:29:08.950 に答える
0

ルールを次のようにします。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^docs/((?=[^\s]*\s).+?)/?$ /docs/index.php?pdf=$1 [NC,L,B,QSA]

これにより、スペースを含むすべての PDF が に転送されますが、スペースの/docs/index.phpないファイル名はそのまま残ります。

于 2013-08-27T11:25:47.860 に答える