-1

アドレスバーに表示したいもの:

http://facebook.com/user

http://facebook.com/user/ -> http://facebook.com/user

http://facebook.com/user/photos -> http://facebook.com/user/photos

私の書き換えルール:

RewriteEngine On
RewriteRule ^(.+)/$ $1 [NC]
RewriteRule ^([A-Za-z0-9_-]+)/?([A-Za-z0-9_-]*)$ user.php?id=$1&second=$2 [NC,L]

何が起こるのですか:

1). http://domain.com/user (working well)

2). http://domain.com/user/ (keeps the / in the address bar and destroys css/js/img paths)

3). http://domain.com/user/photos (same result as 2, correct except the paths)

パスを強制的に使用<base href="...">すると、ページが正しく表示されます。しかし、私はそれなしで私の問題を解決したいと思います。

アドレスバーの末尾のスラッシュを削除するにはどうすればよいですか?書き直しは意図したとおりに機能しているようです。

4

2 に答える 2

1

あなたの問題は、誰かhttp://domain.com/user/photosがたとえばアクセスすると、ページ内のcss、js、およびその他の相対リンクがhttp://domain.com/user/css/main.css(たとえば)に解決されることです。

これには2つの解決策があります:

  • ページのヘッドセクションにベースタグを追加します(すでに試しました)
  • ページ内のすべての相対リンクを変更します絶対リンク(私はあなたに勧めません)

したがって、より簡単な解決策は、ベースタグを使用することです。

注:最後にスラッシュを削除しても、機能する可能性はありますが、http://domain.com/user/確実に機能しません。http://domain.com/user/photos

于 2012-09-14T10:07:06.923 に答える
1

フレンドリURLを使用する場合は、リソースに絶対パスを使用する必要があります。

最初の宣言

あなたはこのように宣言index.phpしたかもしれません:

<link rel="stylesheet" href="stylesheets/styles.css" />
<img src="assets/user.png" />
<script type="text/javascript" src="scripts/home.js"></script>

/絶対パスに使用する提案された方法

ただし、次のように翻訳する必要があります。

<link rel="stylesheet" href="/stylesheets/styles.css" />
<img src="/assets/user.png" />
<script type="text/javascript" src="/scripts/home.js"></script>

/絶対URLとしてそれらを作成するために前面にあることに注意してください。

使用する<base href="/" />

これが面倒な作業になる場合は、次のタグを使用できます。

<base href="/" />

これにより、相対URLがルートに関連付けられます。

$baseurl変数の使用

もう1つのより良い方法は、$baseurl変数を前に付けることです。

<link rel="stylesheet" href="<?php echo $baseurl; ?>/stylesheets/styles.css" />
<img src="<?php echo $baseurl; ?>/assets/user.png" />
<script type="text/javascript" src="<?php echo $baseurl; ?>/scripts/home.js"></script>

このように$baseurl、ルートではなくフォルダでホストしている場合は、値を変更することもできます。

于 2012-09-14T10:07:53.287 に答える