1
#RewriteEngine On

#RewriteCond %{REQUEST_FILENAME} !-d 
#RewriteCond %{REQUEST_FILENAME}\.php -f 
#RewriteRule ^(.*)$ $1.php

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]

# The following rule does the rewrite.
RewriteRule ^user/(.+)/$ profile.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?

<files .htaccess>
order allow,deny
deny from all
</files>

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

この URL にアクセスすると: http://mysite.com/user/john/ - これは完全に機能します。しかし、次のように末尾にスラッシュを付けずに URL にアクセスすると、http: //mysite.com/user/johnブラウザから次のエラーが表示されます。

ここに画像の説明を入力

ここで何をすべきですか?あなたの助けは非常に高く評価され、報われるでしょう!

ありがとう!:-)

4

1 に答える 1

1

ここでのルール:

RewriteRule ^user/(!(profile.php))$ user/$1/ [R=301,L]

私にはうまくいかないようです。次のように変更してみてください。

RewriteCond %{REQUEST_URI} !^/user/profile.php
RewriteRule ^user/(.*[^/])$ user/$1/ [R=301,L]

元のルールが一致していないため、のリクエストhttp://mysite.com/user/johnはルールを変更せずにすり抜けるため、profile.php によって処理されません。

于 2012-08-13T03:22:43.133 に答える