2

ルールを設定しました、

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/?$ user.php?userid=$1

http:// localhost / usernamehttp://localhost/user.php?id = usernameにリダイレクトしますが、他の既存のフォルダーページの場合はuser.phpページにリダイレクトします。その既存のフォルダではなく、たとえばhttp:// localhost / folderはまだhttp:// localhost / folder /?userid = folderにリダイレクトします。たとえば、 http:// localhostと入力すると、既存のディレクトリで機能するようにするにはどうすればよいですか。 / folder次に、/folder/ディレクトリのページが表示されます???

4

2 に答える 2

1

.htaccessコードを次のように置き換えます。

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

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]

RewriteRule ^(messages)/?$ index.php?page=$1 [L,NC,QSA]

RewriteRule ^(A-Z0-9_-]+)/?$ user.php?userid=$1 [L,NC,QSA]

それでも機能しない場合は、access.logから一致する長いエントリを投稿し、httpd.confでRewriteLogを有効にして、そこから質問にログを投稿してください。

于 2012-05-06T13:28:25.857 に答える
1

問題は、2番目のRewriteRuleにRewriteCondsがないことです。2つのRewriteCondは最初のルールにのみ適用され、その後停止します。したがって、2番目のルールはすべてのリクエストURIに無条件に適用されます。したがって、.htaccessのこの部分は、代わりに次のようになります。

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^messages/?$ index.php?page=messages [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/?$ user.php?userid=$1 [L,NC,QSA] 
于 2012-05-06T16:49:47.147 に答える