#php #apache #.htaccess #redirect
#php #apache #.htaccess #перенаправление
Вопрос:
Я использую файл htacess для удаления расширения .php со своих веб-страниц. Однако у меня есть страница под названием images.php и каталог под названием images (оба в корне).
Поэтому, когда расширение .php удаляется с веб-страницы изображений, сайт перенаправляется в каталог изображений.
Я попытался переименовать файл изображений из image.php чтобы imageone.php а затем с помощью перенаправления htacess, но проблема сохраняется
Могу ли я каким-либо образом преодолеть это?
# Remove .php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .* $0.php
#browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /([^ ] ).php
RewriteRule ^/?(.*).php$ /$1 [L,R=301]
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
</IfModule>
Redirect 301 /images.php http://www.thewebsite.com/imagesone.php
Комментарии:
1. Проблема в том, что вы сначала переписываете расширение файла php, поэтому запрос /images.php в конечном итоге становится /images, который, в свою очередь, переводится в каталог /images/
2. Спасибо, Дерек, да, это то, что я думаю… Могу ли я изменить порядок?. Я попытался разместить перенаправление над правилом усечения .php, но столкнулся с той же проблемой
3. Попробуйте переместить перенаправление выше mod_rewrite
4. Спасибо, Дерек, это не работает, я даже пытался переместить его в начало файла
Ответ №1:
Вы забыли #
перед строкой комментария browser requests PHP
.
# browser requests PHP
Комментарии:
1. Спасибо, это была просто опечатка выше
Ответ №2:
Избегайте смешивания Redirect
с mod_rewrite
правилами и располагайте их в таком порядке:
RewriteEngine On
RewriteRule ^/?images.php$ http://www.thewebsite.com/imagesone.php [L,NC,R=301]
# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /([^ ] ).php
RewriteRule ^/?(. ).php$ /$1 [L,R=301,NC]
# internally add .php to requests
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(. ?)/?$ $1.php [L]