Справка по правилам переписывания Apache, странные результаты

Я иду в кругу по этому вопросу.

RewriteRule ^Homes-by-price Real-Estate-Listings.php?minPrice=0&maxPrice=999999999 [NC,L]
RewriteRule ^Homes-by-price/([0-9]+) Real-Estate-Listings.php?minPrice=0&maxPrice=$1 [NC,L]

Первая строка работает. Когда я вхожу / Дома по цене и получаю страницу, показывающую

 Real-Estate-Listings.php?minPrice=0&maxPrice=999999999

Но когда я набираю

 /Homes-by-price/100000

Я должен получить

 Real-Estate-Listings.php?minPrice=0&maxPrice=100000

Вместо этого я получаю пустую веб-страницу и консоль отладки, показывающую мне HTML-скрипт для этой страницы.

Если я наберу в

 /Real-Estate-Listings.php?minPrice=0&maxPrice=100000

все отображается правильно.

Завершить htaccess (закомментированные части были удалены для устранения неполадок в этой проблеме.)

DirectoryIndex default.html

#Block listing of folder contents
IndexIgnore *

RewriteEngine on

#Rewrite rule for force https and www
# located in 000-default.conf


#rewrite rules single listing page (real-estate-listing.php)
#RewriteRule ^home-for-sale/mls/([0-9]+) real-estate-listing.php?mls=$1 [NC,L]
#RewriteRule ^home-for-sale/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+) real-estate-listing.php?city=$1&address=$2 [NC,L]
#RewriteRule ^commercial-property-for-sale/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+) real-estate-listing.php?city=$1&address=$2 [NC,L]
#RewriteRule ^land-for-sale/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+) real-estate-listing.php?city=$1&address=$2 [NC,L]
#RewriteRule ^business-for-sale/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+) real-estate-listing.php?city=$1&address=$2 [NC,L]
#RewriteRule ^property-for-sale/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+) real-estate-listing.php?city=$1&address=$2 [NC,L]
#RewriteRule ^investment-property-for-sale/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+) real-estate-listing.php?city=$1&address=$2 [NC,L]

#rewrite rules for search page showing multiple listings (Real-Estate-Listings.php)
RewriteRule ^Homes-by-price/([0-9]+) Real-Estate-Listings.php?minPrice=0&maxPrice=$1 [NC,L]
RewriteRule ^Homes-by-price Real-Estate-Listings.php?maxPrice=999999999 [NC,L]

<IfModule mod_headers.c>
<FilesMatch ".(js|css|xml|gz|html|php|json)$">
Header append Vary: Accept-Encoding
</FilesMatch>
</IfModule>

0

Решение

Оба правила должны идти к одной цели с первой целью:

RewriteRule ^Homes-by-price Real-Estate-Listings.php?minPrice=0&maxPrice=999999999 [NC,L]
RewriteRule ^Homes-by-price/([0-9]+) Real-Estate-Listings.php?minPrice=0&maxPrice=$1 [NC,L]

Каждый запрос начинается с Homes-by-price будет обработано первым правилом, поэтому второе правило бесполезно, просто поместите последнее правило в начало следующим образом:

RewriteRule ^Homes-by-price/([0-9]+) Real-Estate-Listings.php?minPrice=0&maxPrice=$1 [NC,L]
RewriteRule ^Homes-by-price Real-Estate-Listings.php?minPrice=0&maxPrice=999999999 [NC,L]

Проверьте это так и дайте мне знать

0

Другие решения

Не уверен, что это лучшее решение, но оно решило проблему.

Используя полный URL в операторе перезаписи, он теперь работает. Теперь оно гласит:

RewriteRule ^Homes-by-price/([0-9]+)/([0-9]+) https://example.com/Real-Estate-Listings.php?minPrice=$1&maxPrice=$2 [DPI,NC,L]
0

Это вызвано вашим первым правилом. Если вы удалите первое правило, второе правило будет работать нормально. Ваше второе правило никогда не запускается, потому что первое правило все еще соответствует URL. Так что это делает изменения в Real-Estate-Listings.php?minPrice=0&maxPrice=999999999 а затем добавляет /100000 до конца. Который вызывает ошибку.

Удаление [L] из первого правила должен почини это. Поскольку первое правило все еще соответствует URL, оно запускается, а затем [L] Флаг останавливает дальнейшие правила, которые будут проходить мимо него.

Флаг [L] заставляет mod_rewrite остановить обработку набора правил. В
в большинстве контекстов это означает, что если правило соответствует, никаких дальнейших правил
будет обработан. Это соответствует последней команде в Perl, или
команда перерыва в C. Используйте этот флаг, чтобы указать, что текущий
Правило должно применяться немедленно, без учета дальнейших правил.

Для получения дополнительной информации о том, как работают флаги RewriteRule, прочитайте документацию здесь: https://httpd.apache.org/docs/current/rewrite/flags.html

0
По вопросам рекламы [email protected]