0

序文

プロファイルページのURLを書き直そうとしています。私のすべてのアプリケーションページには.html拡張子が付いているので、文字、数字、、、-およびだけを一致させようとしてい.ます。

したがって、これらは有効です

site.com/steve
site.com/steve-robbins
site.com/steve.robbins

しかし、これらはそうではありません

site.com/steve.html
site.com/steve-robbins.php

.htmlカスタムURLに、または.php最後にないようにチェックを入れていると仮定します。

問題

私は現在これを使用していますが、機能していません

RewriteRule ^([a-zA-Z0-9\.-]+)$ profile.php?url=$1 [L]

urlに設定する必要steveがありますが、に設定していますprofile.php

私は何が間違っているのですか?


私の完全な.htaccess

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]

#
#   LOGIN
#
RewriteRule ^([a-z0-9]{255})/activate\.html$ login.php?activate=$1 [L]
RewriteRule ^logout\.html$ login.php?logout [L]

#
#   SETTINGS
#
RewriteRule ^change-([a-z]+)\.html$ account-settings.php?$1 [L]

RewriteRule ^([a-zA-Z0-9\.-]+)$ profile.php?url=$1 [L]

# SEO friendly URLs
RewriteRule ^([a-zA-Z0-9-_.]+)\.html$ $1.php [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([a-zA-Z0-9-_.]+)\.php
RewriteRule ^([a-zA-Z0-9-_.]+)\.php$ $1.html [R=301]
4

3 に答える 3

1

これをルールの先頭に(RewriteBase /ディレクティブの下で)追加します。

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

それはそれがループするのを止めるはずです。書き換えエンジンは、入力されるURI(クエリ文字列なし)がルールから出力されるURIと同じになるまで、すべてのルールを再適用し続けます。そのため、の値はurlですprofile.php

于 2012-09-18T20:46:08.627 に答える
0

私は mod_rewrite ルールを解釈する初心者のようなものですが、ルールが一致し、再度一致することを正しく理解している場合は、/profile/user などの URL マッチング スキームに何かを追加するか、既にリダイレクトされている場合はリダイレクトしないという条件を追加します。

于 2012-09-18T20:44:08.300 に答える
0

次のように、リダイレクトの先頭にスラッシュを追加してみてください。

RewriteRule ^([a-zA-Z0-9.-]+)$ /profile.php?url=$1 [L]

url値を取得している理由はprofile.php、ファイル[L]に関してはフラグが誤解を招くためです。.htaccessサーバー構成ファイルでは、あなたが考えていることを正確に実行しますが、.htaccessファイルでは、そのルールでルールの読み取りを停止しますが、いずれかのルールによってパスが変更されるまで、ルールを再度調べます。先頭に を追加すると、正規表現から/除外するため、ルールは 2 回目に一致しなくなります。私自身、この機能/にしばらく苦労しました。

于 2012-09-18T20:40:09.633 に答える