0

私はいくつかの単純な URL を書き直そうとしています:

http://www.site.com/folder/index.php?page=something

の中へ

http://www.site.com/folder/something

ここに私の .htaccess ファイルがあります( /folder/ に配置されます)

RewriteEngine On
RewriteBase /folder
RewriteRule ^(.*)$ index.php?page=$1 [R]

このルールでは、常にこの URL を取得します

    http://www.site.com/folder/index.php?page=index.php

私は何を間違っていますか?

4

5 に答える 5

1

間違った一致を参照しています。その$2ように使用してください

RewriteEngine On

RewriteBase /folder

RewriteRule ^(.*)$ index.php?page=$2 [R]

上記は事実上正しくありません。が正しい文字と一致していないよう.です (理由はわかりません)。

問題の原因を知らずにこれを回避する最善の方法は、次のように文字と数字を単純に一致させることです。

# Turn on the rewrite engine
RewriteEngine On

# Set the rewrites for /folder
RewriteBase /folder

# Set the rewrite rules
RewriteRule ^([a-z0-9]+)/?$ index.php?page=$1 [NC]
于 2012-11-18T20:29:02.893 に答える
0

最初のルールは完全に機能しました。唯一の問題は、[R] 修飾子が/folder/something を /folder/index.php?page=something にリダイレクトし、2 番目のリクエストを引き起こしたことです。

/folder/index.php?page=something にルールを適用すると、 /folder/index.php?page=index.php が得られます

これを修正するには、 [R] ( HTTP 302 Redirect ) を [L] (ここで一致する場合は一致するチェーンを残す) に置き換えてください。

于 2012-11-18T23:40:09.963 に答える
0

みんなのおかげで、私がやろうと思っていたことが成功しました:

RewriteEngine On
RewriteBase /folder/

#Excluding direct url to php files
RewriteCond %{REQUEST_URI} !(.*)\.php$
#Excluding the empty space url
RewriteCond %{REQUEST_URI} !^(\s*)$
RewriteCond %{REQUEST_URI} !\.(gif|jpg|png|css|js|)$ [NC]
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
于 2012-11-19T11:02:26.940 に答える
-1

私が提案する場合は、http: //www.generateit.net/mod-rewrite/などの htaccess のジェネレーターを調べてください。

これにより、次のことが得られます。

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

上記を編集しました。これは、ローカル テストドメインでの実際の例です。おそらく、これはまさにあなたが探していたものです。

また、可能であれば、ページの拡張子を省略することはお勧めできません。Google は、.html や .php のように認識できるようにしたいと考えています。

また、追加するすべてのパラメーターにrewriterule を追加する必要があります。

最後に、index.php を省略します。他のページが見つからない場合、サーバーは自動的に index.php を読み込みますが、アドレスバーに表示されている必要はありません。

于 2012-11-18T20:30:11.303 に答える