8

個人の Web サイトでは、ディレクトリ構造を新しい Web サイトに簡単に移動できるように、アンカーで相対パスを使用することが常に推奨されますが、Web サイトの一部をパスワードで保護し (.htaccess を使用)、https を使用したいと考えています。アンカーの href にハードコーディングせずに別のプロトコルを指定する方法はありますwww.domain.comか?

例:

<a href="/student/example">Link</a>

私はそれを次のようなものに変えたい:

<a href="https: /student/example">Link</a>

上記は明らかに機能しません。それを行う方法はありますか?私はスクリプト作成を避けようとしていますが、PHP や ASP よりも JavaScript を使用することをお勧めします。

4

4 に答える 4

2

これは、Javascript に依存して href を動的に変更しないとできません。相対 URI を絶対 URI に変換する方法は、RFC 3986 セクション 5.2.2で説明されています。

if defined(R.scheme) then
   T.scheme    = R.scheme;
   T.authority = R.authority;
   T.path      = remove_dot_segments(R.path);
   T.query     = R.query;
else
   if defined(R.authority) then
      T.authority = R.authority;
      T.path      = remove_dot_segments(R.path);
      T.query     = R.query;
   else
      if (R.path == "") then
         T.path = Base.path;
         if defined(R.query) then
            T.query = R.query;
         else
            T.query = Base.query;
         endif;
      else
         if (R.path starts-with "/") then
            T.path = remove_dot_segments(R.path);
         else
            T.path = merge(Base.path, R.path);
            T.path = remove_dot_segments(T.path);
         endif;
         T.query = R.query;
      endif;
      T.authority = Base.authority;
    endif;
    T.scheme = Base.scheme;
  endif;
  T.fragment = R.fragment;

は相対RURL で、Tはターゲットです。

上記は基本的に、スキームが相対URIで指定されている場合、ターゲットURIは相対URI全体になるため、スキームを指定する唯一の方法はURL全体を指定することです.

Javascript ベースのアプローチを使用する場合は、次のようなものを使用して href を動的に設定できますa.href = 'https://' + window.location.host + a.getAttribute('href')aAnchorElement はどこにありますか。

Javascript バージョンのデモは次のとおりです: http://jsfiddle.net/7DWV5/

ただし、主に遭遇した理由により、ホスト名を構成ファイルに保存するかHost、フロントコントローラーの HTTP 要求ヘッダーから検出することをお勧めします。そうすれば、ページの生成中に HTML にテンプレート化することができます。これにより、URL が生成された後にクライアント側のスクリプトを使用して URL を修正する必要がなくなります。これは望ましいことかもしれません。誰もが Javascript を有効にしているわけではないからです。

于 2013-06-12T00:14:17.850 に答える
0

.htaccess も使用して、サイトの特定の URL に https を追加する必要があります。.htaccess ファイルに次の行が含まれていることを確認してください。

RewriteEngine on

その後、次の行を追加してみてください。

RewriteRule "^/student(/.*)" "https://%{HTTP_HOST}$1" [R=301,L]

http://www.askapache.com/htaccess/ssl-example-usage-in-htaccess.html#redirect-urls-to-ssl

于 2013-06-12T00:16:49.257 に答える