Iki yeniden yazma url'si kuralı arasındaki karışıklık

0

Soru

bu iki kural karıştı :

RewriteRule ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ search.php?city=$1&speciality=$2 [L] 
RewriteRule ^health-institute-app-([a-zA-Z\-]+)$ search.php?city=$1 [L]

ulaşmak istediğimde health-institute-app-mycity (2. kural) sunucu düşünün app bir değer olarak ve ulaşmaya çalışın search.php?city=app&speciality=mycity (1. kural)

bunların iki ayrı kural olduğunu nasıl söyleyebilirim?

.htaccess apache mod-rewrite
2021-11-23 10:56:12
1

En iyi cevabı

2

Evet, çünkü regex ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ ilk kuralda da eşleşir health-institute-app-mycity.

Bu iki yönergeyi tersine çevirmeniz gerekir, böylece daha spesifik kural ilk olur.

Örneğin:

RewriteRule ^health-institute-app-([a-zA-Z-]+)$ search.php?city=$1 [L]
RewriteRule ^health-institute-([a-zA-Z-]+)-([a-zA-Z-]+)$ search.php?city=$1&speciality=$2 [L] 

(Karakter sınıfının başında veya sonundayken ters eğik çizgiden kaçmanıza gerek yoktur.)

BUNUNLA birlikte, (şimdi) ikinci kuraldaki regex, tire işaretinden bu yana potansiyel olarak belirsizdir (-) iki değeri sınırlamak için kullanılır (city ve speciality), ancak tire her iki karakter sınıfına da dahil edilmiştir, bu nedenle muhtemelen değerlerin kendilerinin bir parçası olabilir. Ancak, her ikisi de city ve speciality regex'in buna izin vermesine rağmen, her ikisi de tire içeremez.

Örneğin, bir istek nasıl olmalıdır health-institute-foo-bar-baz-qux çözülmesi? Niceleyiciden beri + açgözlü, bu şu anda sonuçlanacak search.php?city=foo-bar-baz&speciality=qux. İçinde bir tire varsa speciality (bu, regex tarafından önerildiği gibi) asla eşleştirilmeyecektir.

2021-12-09 22:55:14

@narseoh Aslında, bu değerler bir tire ile sınırlandırıldığından, tire karakter sınıflarına dahil edilerek (örn. değerlerin kendileri bir tire içerebilir) bir belirsizlik getiriyorsunuz. örn. What should health-institute-foo-bar-baz-qux gidermek için? Olabilir city tire içeriyor mu?
MrWhite

Evet, gerçekten de, bazı şehirlerin şehir adında bir tire işareti vardır ve diğer şehirlerin iki kelimesi vardır, boşluk url'de bir tire ile değiştirilir
narseoh

@narseoh Tamam, yani speciality hiç tire içermiyor mu? (Aksi takdirde, bir parçası haline gelecektir city.) Bu durumda tire işaretinden çıkarılmalıdır. speciality karakter sınıfı, bu belirsizliği/karışıklığı ortadan kaldırmak için gereksizdir.
MrWhite

teşekkürler @ MrWhite, aslında uzmanlık bile benim için işleri biraz daha karmaşık hale getiren bir tireye sahip olabilir. Bunu düşündüm ve verileri ayırmak için (-) ile (/) değiştirdim, başka sorunlarım olduğunu söyledi (bu konuda başka bir iş parçacığı oluşturacağım)
narseoh

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................