У меня есть небольшой веб-сайт, который я бы хотел переписать только на некоторых страницах с htaccess и скрыть index.php. Я пробил этот код:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS_HOST} !^$
RewriteCond %{HTTPS_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ https%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteRule ^despre-noi/?$ despre-noi.php [R=301,NC,L] # Handle requests for "despre-noi"
RewriteRule ^detalii-plati/?$ cum-platesc.php [R=301,NC,L] # Handle requests for "modalitati de plata"
RewriteRule ^contact/?$ contact.php [R=301,NC,L] # Handle requests for "contact"
RewriteRule ^politica-de-confidentialitate/?$ politica-de-confidentialitate.php [R=301,NC,L] # Handle requests for "politica de confidentialitate"
RewriteRule ^termeni-si-conditii/?$ termeni-si-conditii.php [R=301,NC,L] # Handle requests for "termeni si conditii"
</ifModule>
Страницы загружаются в порядке, но все еще показывают расширение.php, но если я нахожу в браузере, URL-адрес без расширения.php не требует расширения. не могли бы вы сказать мне, где не так? Потому что я хочу, чтобы только эти страницы находились в этом состоянии, а не весь сайт.
Спасибо
//Edit: у меня есть ssl, и для этого есть условие с https.
Удалите [R=301]
из всех ваших правил .php
таких как
RewriteRule ^despre-noi/?$ despre-noi.php [NC,L]
Добавьте следующее слегка измененное правило, которое вы использовали ранее для всех php файлов.
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(despre-noi|cum-platesc|contact)\.php [NC]
RewriteRule ^ /%1 [L,R=301]
Это должно появиться перед правилами .php
файла уже в вашем htaccess. Добавьте имена всех файлов php, которые хотите работать таким образом внутри выражения (..|..)
для условия %{THE_REQUEST}
.
domain.com/contact.php, чтобы показать его domain.com/contact-us
Да, это возможно, но так как имена теперь отличаются, вам нужно будет удалить contact
из текущей %{THE_REQUEST}
rule (..|..)
и добавить отдельное правило следующим образом (снова перед правилами .php
)
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /contact\.php [NC]
RewriteRule ^ /contact-us [L,R=301]
Затем просто измените существующее .php
правило как
RewriteRule ^contact-us/?$ contact.php [NC,L]