Rumah > Soal Jawab > teks badan
Saya cuba menghantar URL dari parameter /server/?Server=ServerName
重写为 /server/ServerName
,以便 ServerName
ke PHP.
Saya kini mempunyai ini dalam fail .htaccess
saya:
RewriteEngine on RewriteBase / RewriteCond %{QUERY_STRING} Server=([^&]+) RewriteRule "^server/$" "/server/%1/?"
Apabila cuba melihat /server/ServerName
或 /server/?Server=ServerName
, saya mendapat ralat 404.
Ini ialah log tulis semula saya:
init rewrite engine with requested uri /server/ pass through /server/ strip per-dir prefix: C:/wamp64/www/server/ -> server/ applying pattern '^server/$' to uri 'server/' RewriteCond: input='Server=ServerName' pattern='Server=([^&]+)' => matched rewrite 'server/' -> '/server/ServerName/?' split uri=/server/ServerName/? -> uri=/server/ServerName/, args=<none> trying to replace prefix C:/wamp64/www/ with / trying to replace context docroot C:/wamp64/www with context prefix internal redirect with /server/ServerName/ [INTERNAL REDIRECT]
Pada ketika ini, saya memerlukan sedikit bimbingan kerana saya kecewa dan saya rasa saya kehilangan satu perkara yang mudah.
Saya cuba melaraskan:
Saya juga telah mengkaji untuk menulis semula kod untuk mencuba dan melihat sama ada ia benar-benar menulis semula.
Menggunakan kod di bawah saya berjaya mengalihkan direktori /test2/
重写为 /server/?Server=ServerName
dan halaman dimuatkan dengan baik, jadi saya tahu modul itu aktif dan berjalan.
RewriteRule ^test2/$ /server/?Server=ServerName [PT,L,R=301]
Cuba buat perubahan ini tanpa berjaya. URL tidak akan ditulis semula, tetapi halaman akan dimuatkan. Apache 2.4 .htaccess penulisan semula URL mesra
RewriteRule ^server/([^/\.]+)/?$ /server/?Server=? [L]
P粉1822188602024-01-17 13:48:59
Nampaknya anda menuju ke arah yang salah. /server/ServerName
,因此在内部将请求从 /server/ServerName
重写为 /em> /server/index.php?Server=ServerName
(请注意添加 index.php
,如注释中所述)。 /server/index.php?Server=ServerName
dalam sumber HTML yang anda patut pautkan ialah laluan fail asas (tersembunyi) yang sebenarnya mengendalikan permintaan.
Walaupun anda seperti telah menyebutnya di baris terakhir...
URL mesti ditulis semula, jika tidak halaman tidak akan dimuatkan. Mungkin terdapat kekeliruan tentang apa sebenarnya "tulisan semula". Ini tidak mengubah URL. Anda tidak menggunakan .htaccess
untuk menukar URL. Anda mesti menukar URL secara manual dalam sumber HTML - URL yang ingin anda pautkan.
Jika anda mahu, anda boleh (sebagai pilihan) melaksanakan "ubah hala" luaran kemudian - ini memang menukar URL. Tetapi ini hanya untuk mengubah hala enjin carian dan pihak ketiga yang mungkin memaut atau mengindeks URL lama. Jadi, ini adalah untuk SEO, bukan untuk menjadikan aplikasi anda "berfungsi".
Jadi, secara ringkasnya, dalam susunan ini:
/server/ServerName
URL berformat. /server/?Server=ServerName
(atau /server/index.php?Server= ServerName< /code >) kepada /server/?Server=ServerName
(或 /server/index.php?Server=ServerName< /code>) 到 /server/ServerName
(URL kanonik).
/server/ServerName
(规范 URL/您要链接到的 URL)重写为 /server/index.php?Server=ServerName
(URL berkanun/URL yang anda mahu pautkan) ke /server/index.php?Server=ServerName
(fail asas yang mengendalikan permintaan). Dalam akar .htaccess
fail:
RewriteEngine On # (OPTIONAL) For SEO, if changing an existing URL structure... # Redirect "/server/?Server=ServerName" to "/server/ServerName" RewriteCond %{QUERY_STRING} ^Server=([^&./]+)(&|$) [NC] RewriteRule ^server/(index\.php)?$ /server/%1 [NE,R=301,L] # Rewrite request from "/server/ServerName" to "/server/index.php?Server=ServerName" RewriteRule ^server/([^/.]+)$ server/index.php?Server= [END]
Ini mengandaikan anda menggunakan Apache 2.4 untuk boleh menggunakan bendera END
dalam peraturan terakhir. Ini mengelakkan daripada perlu mempunyai syarat tambahan dalam peraturan pertama yang menyemak permintaan langsung dan bukannya permintaan "ditulis semula" (untuk mengelakkan gelung ubah hala).
Dalam peraturan pertama ("Redirect"), bahagian index.php
adalah pilihan. Rujukan balik %1
mengandungi nilai parameter URL Server
yang ditangkap dalam index.php
部分是可选的。 %1
反向引用包含在前面的条件中捕获的Server
URL 参数的值。 Server
condition
Server
mestilah tidak kosong dan tidak mengandungi titik atau garis miring (mengikut ungkapan biasa yang anda berikan dalam peraturan sebelumnya), jika tidak, ia tidak akan diubah hala atau ditulis semula. Ambil perhatian bahawa titik tersurat dalam kelas aksara ungkapan biasa tidak memerlukan pelarian garis miring ke belakang. 🎜Sila ambil perhatian bahawa saya menganggap (berdasarkan contoh anda) bahawa URL yang diminta tidak berakhir dengan garis miring (iaitu /server/ServerName
dan bukannya /server/ServerName/< /code >), jadi saya mengalih keluar peraturan terakhir
),因此我删除了 /?
pada penghujung RewriteRule
/server/ServerName
而不是 < code>/server/ServerName/RewriteRule
pattern 末尾的可选 /?
pattern
Server
URL 参数值中期望的值,NE
(noescape
) 标志可能是也可能不是必需的。 QUERY_STRING
URL dikodkan berdasarkan
.htaccess
中使用 PT
(passthrough
) 标志,因为这是此上下文中的默认行为。 (PT
Anda tidak perlu menggunakan bendera yang hanya relevan apabila menggunakan mod_rewrite dalam konteks server atau vhost