3

apachesmod_rewriteに問題があります。PHPアプリケーションでクリーンURLを作成したいのですが、期待した結果が得られないようです。

.htaccessファイルで次のコードを使用しています。

RewriteEngine on
RewriteRule ^project/([0-9]{4})/([0-9]{2})$ /project/index.php?q=$1&r=$2 [L]
RewriteRule ^project/([0-9]{4})$ /project/index.php?q=$1 [L]

そうするために、私が見るときhttp://localhost/user/project/system、それは見ることと同等ですhttp://localhost/user/project/index.php?q=system

結果を取得する代わりに、典型的な404エラーが発生します。

また、.htaccessコードを次のように置き換えることでmod_rewriteが機能するかどうかを確認しました。

Options +FollowSymLinks
RewriteEngine On
RewriteRule (.*) http://www.stackoverflow.com

そして、それは私をここに適切にリダイレクトするので、mod_rewriteは間違いなく機能しています。

私のプロジェクトへのルートパスは/home/user/public_html/project

私のプロジェクトを表示するために使用されるURLはhttp://localhost/user/project

これ以上の情報が必要な場合は私に知らせてください。

ありがとう

4

3 に答える 3

0

あなたはおそらく意味します

RewriteRule ^/project/([0-9]{4})/([0-9]{2})$ /project/index.php?q=$1&r=$2 [L] 
RewriteRule ^/project/([0-9]{4})$ /project/index.php?q=$1 [L] 

「^project」は「行の開始は「project」」を意味しますが、開始は「/ project」であるため、開始スラッシュ(つまり、「^ / project ...」)を含める必要があります。


申し訳ありませんが、システムビット(およびユーザービット)を見逃しました。スラッシュに集中していました。

RewriteRule ^/user/project/([a-zA-Z0-9]*)/([a-zA-Z0-9]*)$ /user/project/index.php?q=$1&r=$2 [L] 
RewriteRule ^/user/project/([a-zA-Z0-9]*)$ /user/project/index.php?q=$1 [L] 

あなたが正しいはずです。

于 2012-06-03T10:30:34.413 に答える
0

正規表現に[0-9]{4}があり、4桁の数字にのみ一致します。ただし、「システム」は4桁の数字ではないため、一致しません。

代わりに[^/]+のようなものを使用できます。

RewriteRule ([^/]+)/([0-9]{2})$ /index.php?q=$1&r=$2 [L]
RewriteRule ([^/]+)$ /index.php?q=$1 [L]

2番目のパラメータが2桁の数字であるかどうかわからない。

編集:最初に「ユーザー」も追加しました。

Edit2:さて、あなたはhtaccessでルートhtdocsにいると思いました。したがって、.htaccessを使用して「プロジェクト」にいる場合は、「プロジェクト」と「ユーザー」を削除してください。

于 2012-06-03T10:41:59.963 に答える
0

.htaccessファイルが実際にすでにサブディレクトリにある場合project/は、RewriteRuleでそのファイルについて再度言及しないでください。それを除く:

RewriteRule ^([0-9]{4})/([0-9]{2})$ /project/index.php?q=$1&r=$2 [L]
# no "project/" here

ルールは常に現在のローカルファイル名マッピングに関係します。

それ以外の場合は、RewriteBaseを試してください。

于 2012-06-03T10:55:39.727 に答える