3

.htaccess ファイルを機能させようとしています。しかし、いくつかの問題があるようです:

RewriteEngine on
RewriteRule ^css/ - [L]
RewriteRule ^img/ - [L]
RewriteRule ^js/ - [L]

RewriteCond %{HTTP_HOST} ^www\.example\.ch$ [NC]
RewriteRule ^(.*)$ http://example.ch/$1 [R=301,L]

RewriteRule ^(dir1/dir2)([a-zA-Z0-9\/\-\_,]+)$ index.php?page=$1&id=$2 [L]
RewriteRule ^(dir1/dir2)([a-zA-Z0-9\/\-\_,]+)$ index.php?page=$1&id=$2 [L]
RewriteRule ^(dir1)([a-zA-Z0-9\/\-\_,]+)$ index.php?page=$1&id=$2 [L]
RewriteRule ^([a-zA-Z0-9\/\-\_,]+)$ index.php?page=$1 [L]

1) .htaccess でドットが機能しません。最後のルールを次のように書くと:

RewriteRule ^(.*)$ index.php?page=$1 [L]

「ホームページ」を取得するだけです。var_dump($_GET) を実行すると、「ページ」というキーがありますが、その値は「index.php」です。住所に書いてある内容が入っていないのはどうしてですか?

2) www.example.ch/page.php のような URL を持つこの Web サイトの古いバージョンがありました。古い .php サイトを新しい Web サイトにリダイレクトしたいので、訪問者が Google で古いリンクをクリックしても 404 エラーが発生しません。上記の .htaccess で example.ch/page.php と入力すると、次のような場所にリダイレクトされます。

 http://example.ch/home/httpd/vhosts/example.ch/httpdocs/page

その理由は何ですか?

ありがとうございました

4

1 に答える 1

2

質問1

これは簡単な修正です....htaccessファイルが書き換えられたURLを書き換えているためです。説明する:

http://mysite.com/this/content                     <---Original URL
http://mysite.com/index.php?key1=this&key2=content <---First rewrite
http://mysite.com/index.php?key1=index.php         <---Second rewrite/final url

これを修正するには、次のように、ファイルが存在する場合は書き換えないように書き換え条件を追加するだけです。

ReWriteCond %{REQUEST_FILENAME} !-f

編集

完全を期すために...その理由

RewriteRule ^([a-zA-Z0-9\/\-\_,]+)$ index.php?page=$1 [L]

作品と

RewriteRule ^(.*)$ index.php?page=$1 [L]

ないのは、パターンに含まれていない.*文字?と場所が含まれているためです (およびGET 文字列から来ています)。=?=

質問2

http://site.com/fileに変換するhttp://site.com/file.phpには、次の書き換えルールを使用できます。

ReWriteCond %{REQUEST_FILENAME} !-f
ReWriteRule ^(.*).php$ $1
于 2013-10-12T21:32:04.083 に答える