URL yeniden yazmayı .htaccess dosyama nasıl uygularım?


17

Bazı URL yeniden yazma işlemleri yapmak istiyorum (Neden? Bu soruya bakın .)

labouseur.com/course-compilers.html 

bunun yerine basitçe görebilir ve kullanabilirler

labouseur.com/course-compilers

(Daha da iyisi, belki de dersler / derleyiciler olacak şekilde yeniden yapılandırmalıyım.)

Web sitem için Linux tabanlı bir paylaşımlı barındırma hizmeti kullanıyorum, bu nedenle sunucunun yönetici kontrolüne sahip değilim, ancak .htaccess üzerinde kontrolüm var. Çevrimiçi okuduğum referanslar benim için net değildi, bu yüzden burada biraz netlik ve tavsiye arıyorum.


Bunun yalnızca sunucu yapılandırmasında (.htaccess) yaptığınız bir şey olmadığını unutmayın . Önemli ilk adım, uygulamanızdaki URL'leri gerçekten değiştirmektir, aksi takdirde çok fazla gereksiz yönlendirme (veya yinelenen içerik) elde edersiniz.
MrWhite

Yanıtlar:


13

Aslında .html dosyasını sunucunuzdaki dosyalardan kaldırabilir ve htcess dosyasındaki ayarları html dosyası olarak sunulacak şekilde ayarlayabilirsiniz, ancak muhtemelen aradığınız şey bu değildir.

Bunu yap :

RewriteEngine on
# Check this condition to ensure that it's not a directory.
RewriteCond %{REQUEST_FILENAME} !-d
# Check this condition to ensure that there's a file there
RewriteCond %{REQUEST_FILENAME}\.html -f
# Replace html with your file extension, eg: php, htm, asp
RewriteRule ^(.*)$ $1.html

Burada, özellikle de yinelenen içerik sorunlarından endişe ediyorsanız, daha karmaşık bir durum söz konusudur. Yukarıdaki kuralla, sayfalarınıza yine de eski URL'lerden erişilebilir.
JasonBirch

3

İlk olarak, apache'nin modülü içerdiğinden ve .htacces dosyalarında izin verildiğinden emin olun, sonra ekleyin:

RewriteEngine on

# Rewrite rules
RewriteRule ^/myoldsubfolder/(.*) /newfolder/$1 

Örneğin,

RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI}\.html -f
RewriteRule ^/(([a-zA-Z0-9_]+)/?)$ /$1.html

Tek seviyeli bir dizin yapısı ve

RewriteRule ^/(([a-zA-Z0-9_]+)/?)+$ /$1.html

Çok seviyeli bir yapı için.

Ama dikkatli ol

Eğer yapınız varsa

/site/.htaccess
/site/subfolder/.htaccess
/site/subfolder/cats/.htaccess

Alt .htaccessdosyalardaki yeniden yazma kuralları , üst klasörlerine göreli olacaktır ve bazı karışık yeniden yazma döngüsü durumlarına girebilirsiniz . RewriteCondMümkünse, onları durdurmak için kullandığınızdan emin olun !


Bu son noktada daha fazla ayrıntıya girmeyi düşünür müsünüz (döngüleri durdurmak için RewriteCond kullanarak)?
Travis Northcutt

2

Yukarıdaki cevaplara ek olarak,

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([\w-]+)$ $1.html [L]

([\w-]+) Kısa çizgi (-) içeren harflere, rakamlara izin verir.

(.*) ne olursa olsun her isteği yeniden yazacaktır.


Sizin RewriteRule desen söz verilen özel örnek kabul edilen cevap üzerinde bir gelişmedir, ancak örneğin birden fazla yol segmenti olduğunda daha genel durum maç için başarısız olur. /path/to/course-compilers. LAşağıdaki kurallar üzerindeki etkisini azaltmak için bayrağı ekleyin . (.*)Desen gereksiz yere genel olsa da , dosyayı kontrol etme koşulu nedeniyle ciddi sorunlara neden olması olası değildir .
MrWhite

1

Bunu yapmak için bir .htaccess dosyası kullanmanız gerekmez. Dosyalarınızı dizinler halinde yapılandırın ve "labouseur.com/course-compilers.html" yerine, index.html dosyasını adlandırın ve "course-compilers" adlı bir dizine koyun. Daha sonra bu dizini işaret ettiğinizde, dizin varsayılan olarak sunulur, ancak URL'de görüntülenmez. Böylece bağlantılarınızı sadece "labourseur.com/course-compilers" olarak yazabilirsiniz ve hepsi iyi olacaktır.

.Htaccess gerekmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.