Перенаправление с использованием htaccess не работает

#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]