Я работаю с онлайн-энциклопедией и пытаюсь добиться следующего:
Учитывая физическое местоположение файла в http://example.com/articles/c/a/t/Cat.html,
Получить местоположение в адресной строке, чтобы показать http://example.com/encyclopedia/Cat.html
Это также должно работать, чтобы, если щелкнуть ссылку или кто-то набрал "example.com/encyclopedia/Cat.html" , сервер будет искать файл в "/ article / c / a / t / Cat.html ", но все же служит для более короткого URI в адресной строке.
Я понимаю, что для этого может потребоваться какой-то тяжелый .htaccess voodoo, или, возможно, для этой цели было бы лучше использовать PHP-скрипт.
Пока что в моем .htaccess есть следующее:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^encyclopedia/(.*)\.html$ articles/$1.html [NC]
RewriteCond %{THE_REQUEST} ^GET\ articles/(.*)
RewriteRule ^articles/(.*) /encyclopedia/$1 [L,R=301]
</IfModule>
Однако, с этим кодом, он работает только, перейдя по адресу "example.com/encyclopedia/c/a/t/Cat.html" и показывая правильную страницу, и когда вы переходите к "/ Articles / C / A / T / Cat.html он по-прежнему не переписывает его как " / энциклопедия / ", он просто остается прежним.
Редактировать - удалив часть GET\
из RewriteCond
и удалив косую черту в начале строки /encyclopedia/$1
в следующей строке, любые запросы к "/ article / c /a/t/Cat.html" правильно перенаправлены в "/ encyclopedia / c / a / t / Cat.html" . Я все еще в растерянности, пытаясь удалить часть "/ c / a / t", хотя. **
Я пытался использовать следующие два правила для удаления части "c / a / t /":
RewriteRule ^encyclopedia/((.)(.)(.).*)\.html$ articles/$2/$3/$4/$1.html [NC]
RewriteRule ^articles/(.)/(.)/(.)/(.*) /encyclopedia/$4 [L,R=301]
Но безуспешно, так как я уверен, что происходит то, что я получаю заглавную букву "C" из "Cat.html" и помещаю ее как "/ article / C / a / t / Cat. html ", который явно не будет работать.
Я искал и изучал .htaccess RewriteRule и RewriteCond в течение нескольких дней, но до сих пор не смог понять это и был достаточно ВЗГЛЯД, чтобы вызвать несколько мигреней.
Будет ли это лучше сделать с помощью сценария PHP? Или это вуду может быть достаточно легко выполнено только с помощью правил .htaccess?