Итак, мой веб-сервер обслуживает файлы, такие как file_name.php. Я хочу сделать так, чтобы запросы на file-name.php были прозрачно перенаправлены на file_name.php, и запросы на file_name.php явно перенаправляются через 301-редирект в файл-name.php.изменение запросов с двумя правилами перезаписи
ie. вы запрашиваете file_name.php, и вы получаете 301, перенаправленный на file-name.php, который вместо этого загружает файл file_name.php.
К сожалению, файл .htaccess, который я написал для этого, не работает. Вот он:
# make it so files with slashes that don't exist transparently redirect to files with underscores
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^-]*)-([^-]*)$ $1_$2
RewriteRule ^([^-]*)-([^-]*)-([^-]*)$ $1_$2_$3
# make it so files with underscores that do exist explicitely redirect to files with slashes
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)$ /$1-$2-$3 [L,R=301]
Самостоятельно они работают, но вместе они приводят к бесконечному циклу.
Любые идеи?
Мне нравится ваше решение! Я пошел вперед и добавил 'RewriteCond% {REQUEST_FILENAME}! -f' к этому третьему' RewriteRule', так что если файл с тире уже существует, он не будет перенаправлен внутренне. Благодаря! – neubert
Да, это условие будет удобно. – anubhava
Почему вы делаете 301 переадресацию для одного _, но 302 переадресации, если есть несколько _? – neubert