0

Web サイトをリクエストするとき、URL に末尾のスラッシュを追加してから、mod_rewrite を使用してパラメータとして index.php に渡します。

私の.htaccessファイルは次のようになります。

RewriteEngine On    

#Add trailing slash
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R]

#Pass to index.php
RewriteRule ^(.*)/$ index.php?p=$1

そして、私のindex.phpファイルでは、パラメータを出力するだけです:

<?php echo $_GET["p"]; ?>

しかし、アドレスバーに http://mydomain.com/ 以外のもの、たとえば http://mydomain.com/contact を入力する php常に を出力しますhttp://mydomain.com/index.phphttp://mydomain.com/index.phpなどの要求されたページの代わりにパラメーターとして何らかの形で渡されましたが、contact理由はわかりません...

また、編集するときは

RewriteRule ^(.*)/$ index.php?p=$1

RewriteRule ^(.*)/$ /index.php?p=$1

URLを入力します。たとえば、mydomain.com/contactApacheは302 Foundと移動先へのリンクを提供しますが、同じページにリンクしています...

何か案は?

ありがとう。

4

1 に答える 1

1

Apache には、特にこれについての素晴らしい長い記事があります。

末尾のスラッシュの問題

すべての Web マスターは、ディレクトリを参照する URL の末尾のスラッシュの問題について歌を歌うことができます。それらが見つからない場合、サーバーはエラーをダンプします。これは、/~quux/foo/ の代わりに /~quux/foo と言うと、サーバーは foo という名前のファイルを検索するためです。そして、このファイルはディレクトリであるため、文句を言います。実際にはほとんどの場合、それ自体を修正しようとしますが、このメカニズムをエミュレートする必要がある場合もあります。たとえば、CGI スクリプトなどに対して複雑な URL の書き換えを何度も行った後などです。

この微妙な問題の解決策は、サーバーに末尾のスラッシュを自動的に追加させることです。これを正しく行うには、外部リダイレクトを使用する必要があるため、ブラウザーは後続の画像などを正しく要求します。内部書き換えのみを行った場合、これはディレクトリ ページに対してのみ機能しますが、このページに画像が含まれているとうまくいきません。ブラウザーはインライン オブジェクトを要求するため、相対 URL を使用します。たとえば、/~quux/foo/index.html 内の image.gif に対するリクエストは、外部リダイレクトなしでは /~quux/image.gif になります!

So, to do this trick we write:

RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo$  foo/  [R]

クレイジーで怠惰な人は、ホームディレクトリの最上位の .htaccess ファイルで次のことを行うことさえできます。ただし、これにより処理のオーバーヘッドが発生することに注意してください。

RewriteEngine  on
RewriteBase    /~quux/
RewriteCond    %{REQUEST_FILENAME}  -d
RewriteRule    ^(.+[^/])$           $1/  [R]

ここで見つけることができます:

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

于 2012-07-27T14:15:12.163 に答える