Я управляю сайтом электронной коммерции для клиента, который был создан с использованием JShop на Apache. По причинам SEO ссылки выглядят так:
http://www.domain.com/shop/section/3151/1/flowers
http://www.domain.com/shop/product/35465/blueflower
которые отображаются на:
http://www.domain.com/shop/section.php/3151/1/flowers
http://www.domain.com/shop/product.php/35465/blueflower
которые дают те же страницы, что и:
http://www.domain.com/shop/section.php?xSec=3151&xPage=1
http://www.domain.com/shop/product.php?xSec=35465
Каким-то образом это достигается без mod_rewrite (я подтвердил это, отключив mod_rewrite и закомментировав все правила перезаписи во всех файлах conf и .htaccess).
Примечание. Файлы section.php и product.php существуют, но раздел и продукт отсутствуют, а также отсутствуют символьные ссылки.
Проблема в том, что на рабочем сервере такое поведение перестало происходить. На моем сервере разработки он все еще работает. Я смог снова заставить производственный сервер работать правильно, используя mod_rewrite, поскольку это единственный способ, которым я знаю, как это сделать. Однако мне действительно нужно знать, что изменилось на рабочем сервере в первую очередь, чтобы я мог правильно понять проблему (чтобы избежать других непредвиденных последствий). Я перезапустил Apache и отменил все изменения, которые я вносил на производственном сервере в то время, когда URL-адреса были повреждены. Они все еще не работают (без моих новых правил перезаписи).
Какие методы Кроме как mod_rewrite можно использовать для удаления расширений .php из URL-адресов?
Согласование содержания может это сделать. включить MultiViews
для shop
папка:
<Directory "/path/to/shop">
Options FollowSymLinks +MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Когда сервер получает запрос /shop/section/3151/1/flowers
(section
не существует), он будет искать section.*
в shop
папки, отсортируйте их по типам мультимедиа и кодировкам содержимого, отправленным браузером, и выберите наиболее подходящий.
Mod_alias, возможно. Что-то вроде:
AliasMatch ^/shop/section/(.*)/(.*)/(.*)$ /shop/section.php?xSec=$1&xPage=$3
AliasMatch ^/shop/product/(.*)/(.*)$ /shop/product.php?xSec=$1
Это могло быть использование PATH_INFO
- подробнее здесь.