Как удалить index.php из пути URL, за исключением случаев, когда путь /index.php/

#regex #.htaccess

Вопрос:

Мне нужно удалить index.php с внутренних страниц, чтобы путь к URL /index.php/path -адресу был справедливым /path . Но при этом если путь есть /index.php/ , то не удалять index.php и оставь все как есть. Я пробую следующие строки в своем .htaccess :

 RewriteCond %{REQUEST_URI} !^.*/index.php/$ [NC]
RewriteRule /index.php/(. )$ /$1
 

Но они удаляют index.php всегда, в том числе, когда путь /index.php/

Ответ №1:

Вы можете использовать эти 2 правила в файле root .htaccess вашего сайта:

 RewriteEngine On

# external redirect to remove /index.php
RewriteCond %{THE_REQUEST} s/ index.php/(S ) [NC]
RewriteRule ^ /%1 [R=301,L,NE]

# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
# rewrite to /index.php/<uri>
RewriteRule .  index.php/$0 [L]