Как использовать htaccess, чтобы переписать только определенные страницы

0

У меня есть небольшой веб-сайт, который я бы хотел переписать только на некоторых страницах с 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.

Теги:
.htaccess
mod-rewrite

1 ответ

1
Лучший ответ

Удалите [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]
  • 0
    До сих пор не работает, вот так я использовал первый раз, и я не знаю, что не так.
  • 0
    Что происходит, когда вы открываете domain.com/contact?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню