Это больше Зачем вопрос.
Я использую CMS, которая обрабатывает чистые URL-адреса через mod_rewrite из коробки.
На сайте есть раздел /accessories
который теперь должен быть переименован в /store
.
Находясь в ленивом режиме, я просто хотел выполнить внутреннюю перезапись с помощью mod_rewrite, поэтому при доступе к example.com/store/
, Я хочу получать контент из example.com/accessories
прозрачно, без внешнего перенаправления.
До сих пор я пробовал это:
RewriteEngine On
# Internally rewrite /store to /accessories
RewriteRule ^store /accessories [L] #also tried with other flags like PT, N, C
# All below rules are provided by CMS
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L]
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*) index.php
Но ничего не работало.
Я мог заставить это работать двумя единственными способами:
путем внутренней перезаписи запроса на соответствующий "беспорядочный" URL, например:
RewriteRule ^store /index.php?s=accessories [L]
используя mod_proxy и ProxyPass
директива (которую я отверг как решение, так как mod_proxy недоступен на рабочем сервере).
Я только что пришел к выводу, что URL-адреса не могут быть внутренне переписаны на другие (поддельные) чистые URL-адреса, при этом сохраняется цепочка перезаписи. Под «фальшивым» я подразумеваю пути URL, которые не являются реальными путями файловой системы (обычно папки) или реальными файлами (например, index.php).
Итак, вопрос: почему?