Pertanyaan Halaman menyegarkan memberi "Halaman tidak ditemukan"


Saya memiliki aplikasi yang menggunakan ng-view tunggal dan beberapa pengontrol serta tampilan. Jika saya menavigasi melalui root, misalnya: www.domain.com, semuanya berfungsi. Kecuali jika saya menekan Ctrl + R (Refresh) maka itu memberi saya 404 eror Page not Found. misalnya: menyegarkan di halaman ini memberi saya kesalahan. http://domain.com/item/1/.

Tetapi jika saya mengakses halaman menggunakan hashbang maka itu berfungsi. http://domain.com/#!/item/1/

Bagaimana saya harus memperbaiki masalah ini? Histacess saya kosong. Dan saya menggunakan chrome yang mendukung hashbang html5.


39
2018-01-05 05:10


asal


Jawaban:


Ketika panggilan browser http://example.com/#!/item/1/, itu memanggil halaman indeks http://example.com/, JS Anda kemudian menentukan konten apa yang akan ditampilkan dengan menganalisis hashtag.

Ketika panggilan browser http://example.com/item/1/, server Anda mencoba melayani halaman indeks http://example.com/item/1/, yang tidak dapat ditemukan dan karena itu melempar kesalahan 404.

Untuk mencapai apa yang Anda inginkan, Anda harus:

  • Buat aturan penulisan ulang untuk menulis ulang tautan ke halaman indeks akar Anda
  • sesuaikan JS Anda sehingga menghasilkan hashtag alih-alih URL. Jika Anda menggunakan AngularJS kemudian matikan mode html5 dengan $locationProvider.html5Mode(false);, atau
  • letakkan halaman indeks di http://example.com/item/1/ yang dialihkan ke http://example.com/#!/item/1/ - Namun perhatikan bahwa ini perlu diulang untuk setiap / prettyPath / Anda krete.

Dengan asumsi Anda menggunakan Apache dan file indeks Anda adalah index.html, coba tambahkan yang berikut ini ke file .htaccess Anda untuk membuat aturan penulisan ulang sebelum mencoba salah satu dari dua solusi lainnya.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)       /index.html/#/$1 
</IfModule>

Jika Anda menggunakan solusi AngularJS / Ajax murni tanpa logika sisi server, ubah index.php menjadi index.html (atau index.htm tergantung pada nama file indeks root Anda).


46
2018-01-05 05:16



Anda hanya perlu menambahkan skrip di bawah ini di .htaccess Anda

RewriteEngine On 
Options FollowSymLinks

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /#/$1 [L]

18
2017-10-23 20:57



ini adalah versi NET dari penulisan ulang URL (IIS)

<system.webServer>
    <rewrite>
      <!--This directive was not converted because it is not supported by IIS: RewriteBase /.-->
      <rules>
        <rule name="Imported Rule 1" stopProcessing="true">
          <match url="^index\.html" ignoreCase="false" />
          <action type="None" />
        </rule>
        <rule name="Imported Rule 2" stopProcessing="true">
          <match url="." ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
          </conditions>
          <action type="Rewrite" url="/index.html" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

9
2017-09-20 01:59



Blog Post yang bagus tentang ini di sini ... http://ericduran.io/2013/05/31/angular-html5Mode-with-yeoman/

"Ini terutama karena rute AngularJS Anda bukan halaman html yang sebenarnya. Contohnya adalah jika Anda memiliki rute di aplikasi sudut Anda untuk / membuat-pesanan. Url ini berfungsi dengan baik jika Anda menautkannya dari dalam aplikasi Anda tetapi jika pengguna mencoba untuk langsung membuka halaman itu, server akan mengembalikan 404. "


3
2017-08-27 14:24



Pada Maret 2018, Cukup tambahkan baris di bawah ini di Anda .htaccess mengajukan.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.front-end*)$ /front-end [NC,L,QSA]
RewriteRule ^(.*)$ /index.html [NC,L,QSA]  

Semoga ini bermanfaat bagi Anda.


1
2018-03-08 14:30



Saya tidak bisa berkomentar tetapi juga menggunakan HTML mode, base href="/", sudo a2enmod rewrite, menggunakan .htaccess menulis kembali. saya harus AllowOverride All di kedua situs yang tersedia di situs Anda dan itu /etc/apache2 apache.conf


0
2018-06-19 12:33



    <ifModule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_URI} !index
      RewriteCond %{REQUEST_URI} !.*\.(css  js|html|png)
      RewriteRule (.*) index.html [L]
    </ifModule>

gunakan ini sebagai .htaccess


0
2017-08-13 13:46