1
RewriteEngine On
RewriteBase /
# Use the following rule if you want to make the page like a directory
RewriteRule ^(v)$ /$1/
# The following rule does the rewrite.
RewriteRule ^(.+)/$ profile.php?name=$1
# The following rewrite the other way round:
RewriteCond %{REQUEST_URI} ^/profile.php
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD|TRACE)\ /profile.php
RewriteCond %{QUERY_STRING} name=([^&]+)
RewriteRule ^profile.php$ %1?

上記のコードを .htaccess ファイルで実行しています。これは profile.php ページで正常に機能します。以前は、私の profile.php がこの種の URL を表示していたからです。

http://mysite.com/profile.php?name=john

しかし、私がそのコードを書いたとき、これは結果です:

http://mysite.com/john/

このコードを自分の category.php にも適用したかったので、上記のコードをコピーするだけで、.htaccess ファイル全体は次のようになります。

RewriteEngine On
RewriteBase /

# Use the following rule if you want to make the page like a directory
RewriteRule ^(v)$ /$1/

# The following rule does the rewrite.
RewriteRule ^(.+)/$ profile.php?name=$1
RewriteRule ^(.+)/$ category.php?cid=$1

# The following rewrite the other way round:
RewriteCond %{REQUEST_URI} ^/profile.php
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD|TRACE)\ /profile.php
RewriteCond %{QUERY_STRING} name=([^&]+)
RewriteRule ^profile.php$ %1?

RewriteCond %{REQUEST_URI} ^/category.php
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD|TRACE)\ /category.php
RewriteCond %{QUERY_STRING} cid=([^&]+)
RewriteRule ^category.php$ %1?

しかし、このコードは奇妙な結果をもたらします。なぜなら、私 http://mysite.com/john/が見ているコンテンツにアクセスすると、私のcategory.phpのコンテンツだからです。

ここで何をすべきですか?どんな助けでも大歓迎です!

ありがとう!

4

3 に答える 3

1

私はあなたのルールに問題があります。私が推測する問題は、リクエストが http://mysite.com/john/のようになるたびに、Webサーバーがリクエストを区別できないということです。カテゴリページ/プロファイルページです。

したがって、プロファイルページリクエストまたはカテゴリページリクエストのいずれかで1つの変更を行うことをお勧めします。

http://mysite.com/profile/john/を追加するだけです

これがうまくいくことを願っています。

于 2012-07-04T02:28:41.870 に答える
1

コメントで変更された質問に答えるには:

これらの用語が URL に表示される場合にユーザーとカテゴリを区別するには、ルールごとに 1 行だけ必要です (テストされていない例)。

RewriteEngine On
RewriteBase /

RewriteRule ^user/(\w+)/?$ /profile.php?name=$1    // using only a limited set of chars (letters and underscore) for the user name and an optional / at the end

RewriteRule ^category/(\w+)/?$ /category.php?cid=$1    // using only a limited set of chars for the category (letters and underscore) and an optional / at the end
于 2012-07-04T02:39:29.230 に答える
0

これを使用して解決したようです:

RewriteEngine On
RewriteBase /

# Use the following rule if you want to make the page like a directory
RewriteRule ^user/(!(profile.php))$ user/$1/ [R=301,L]
RewriteRule ^category/(!(category.php))$ category/$1/ [R=301,L]

# The following rule does the rewrite.
RewriteRule ^user/(.+)/$ profile.php?id=$1
RewriteRule ^category/(.+)/$ category.php?id=$1

# The following rewrite the other way round:
RewriteCond %{REQUEST_URI} ^/profile.php
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD|TRACE)\ /profile.php
RewriteCond %{QUERY_STRING} id=([^&]+)
RewriteRule ^profile.php$ user/%1?

RewriteCond %{REQUEST_URI} ^/category.php
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD|TRACE)\ /category.php
RewriteCond %{QUERY_STRING} id=([^&]+)
RewriteRule ^category.php$ category/%1?
于 2012-07-04T02:38:32.850 に答える