удалить index.php url rewriting .htaccess

Я написал этот код для 301 redirect

 RewriteCond %{THE_REQUEST} ^.*\/index\.php\ HTTP/ RewriteRule ^(.*)index\.php$ /$1 [R=301,L] 

Он работает хорошо, если я посещаю свой сайт как http://mysite.com/index.php , он перенаправляет меня на http://mysite.com

Но на моем localhost localhost/mysite/index.php если я пытаюсь посетить index.php как localhost/mysite/index.php он перенаправляет меня на localhost .

Как я могу решить эту проблему? Правильно ли указан код, написанный выше?

Похоже, у вас есть файл htaccess в корне вашего документа на вашем сервере и в каталоге mysite на localhost. Поскольку местоположение файла htaccess довольно важно для того, как он перенаправляет URI, вам нужно сделать его равнодушным к местоположению файла. Вы можете сделать это, извлекая информацию о пути из своего условия, а не URI, который передан в правило, чтобы соответствовать:

 RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /(.*)index\.php($|\ |\?) RewriteRule ^ /%1 [R=301,L] 

Переменная %{THE_REQUEST} – это первая строка фактического HTTP-запроса, которая выглядит примерно так:

 GET /path/index.php HTTP/1.1 

Шаблон сначала соответствует любому числу возможных МЕТОДОВ (GET, POST, HEAD и т. Д.), Затем он создает группировку пути URI, которая находится перед index.php , а затем заканчивает сопоставление, так как нам все равно, что после index.php .

попробуй это

 RewriteRule ^(.*)index\.php$ /$1 [R=301,NC] 

Если ваш сайт не находится в корневом каталоге сервера (который не находится на вашем локальном RewriteBase ), вам нужно будет добавить директиву RewriteBase : https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase

Вам нужно добавить строку:

 RewriteBase /mysite/ 

над текущими строками в htaccess на вашем локальном хосте

Хотя директива RewriteBase означает это использование, вы можете протестировать localhost и переписать root в свой подкаталог только в том случае, если test == true. например:

 RewriteCond %{HTTP_HOST} ^localhost$ RewriteCond %{REQUEST_URI} !^/subdirectory/ RewriteRule (.*) /subdirectory/$1 [L] 

Примечание. Я не использовал это в течение некоторого времени и не могу гарантировать, что он будет работать из коробки; может потребоваться некоторое редактирование.