Jump to content
  • 0

убрать расширение страницы htaccess


VeniVidiVici
 Share

Question

Убираю расширение .php страницы таким кодом:

RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L]

Url отображается нормально без .php - www.site.ru/example

но если напрямую прописать в url название страницы с расширением .php то отображается url вида -   www.ysite.ru/example.php 

Как это исправить? думаю прописать редирект вручную для каждой страницы(о_О), типа:

Redirect 301 /example.php www.site.ru/example

но может, есть более универсальное решение?

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0
RewriteEngine On
RewriteBase /

#стопим зацикливание
RewriteCond %{ENV:REDIRECT_FINISH} !^$
RewriteRule ^ - [L]
#редиректим если адрес указан с расширением php
RewriteRule ^(.+)\.php$ /$1 [R=301,L]

#сюда можно добавить переадресацию с адресов вида /catalog/ на /catalog/index.php
#RewriteRule ^(.+)\/$ /$1/index.php [E=FINISH:1,L]

#переадресовываем адреса с "без расширения" на файлы php
RewriteRule ^(.+)$ /$1.php [E=FINISH:1,L]

Грубо говоря все адреса заканчивающиеся на слеш(нужно раскомментить одну строку) рассматриваются как каталог и делаем внутреннюю переадресацию на индексный файл, все остальные адреса рассматриваются как адреса на .php файлы

Link to comment
Share on other sites

  • 0

А ещё есть самый лучший вариант для организации ЧПУ, это вот такое правило:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Если по простому, то абсолютно все запросы перебрасываем на файл index.php, а адрес по которому был осуществлен запрос пихаем в GET параметр q

Дальше делаем разбор адреса и нужные переадресации, редиректы или выдачу контента в файле index.php средствами языка.

Link to comment
Share on other sites

  • 0

wwt, спасибо большое.

Правда у меня ничего не работает, с серверными задачами вообще в 1 раз сталкиваюсь, полный ноль в этом.

Может порекомендуешь что-то что можно почитать на эту тему? Или можно как-то с тобой связаться?

Link to comment
Share on other sites

  • 0
AddDefaultCharset utf-8

<ifModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript

<FilesMatch "\.(ttf|otf|eot|svg)$" >
    SetOutputFilter DEFLATE
</FilesMatch>
</ifModule>

<ifModule mod_headers.c>
	#кэшировать html и htm файлы на один день
	<FilesMatch "\.(html|htm)$">
		Header set Cache-Control "max-age=43200"
	</FilesMatch>
	#кэшировать css, javascript и текстовые файлы на одну неделю
	<FilesMatch "\.(js|css|txt)$">
		Header set Cache-Control "max-age=604800"
	</FilesMatch>
	#кэшировать флэш и изображения на месяц
	<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png|ttf|otf|eot|woff|svg)$">
		Header set Cache-Control "max-age=2592000"
	</FilesMatch>
	#отключить кэширование
	<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
		Header unset Cache-Control
	</FilesMatch>
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine on
	RewriteCond %{HTTP_HOST} ^www.my-site\.ru$ [NC]
    RewriteRule ^(.*)$ http://my-site.ru/$1 [R=301,L]
    
    RewriteRule ^([a-zA-Z0-9_]+)$ /$1.php
    
</IfModule>

 

Link to comment
Share on other sites

  • 0

вот меняем последний блок, чтобы выглядел вот так:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
  
# редиректим с www. на без www.
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

#стопим зацикливание
RewriteCond %{ENV:REDIRECT_FINISH} !^$
RewriteRule ^ - [L]
#редиректим если адрес указан с расширением php
RewriteRule ^(.+)\.php$ /$1 [R=301,L]

#сюда можно добавить переадресацию с адресов вида /catalog/ на /catalog/index.php
#RewriteRule ^(.+)\/$ /$1/index.php [E=FINISH:1,L]

#переадресовываем адреса с "без расширения" на файлы php
RewriteRule ^(.+)$ /$1.php [E=FINISH:1,L]
</IfModule>

 

Link to comment
Share on other sites

  • 0

а ну да это из-за индексного файла, сделайте лучше по человечески вот так:

 

 

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
  
# редиректим с www. на без www.
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

А в файле index.php разбирайте строку запроса примерно вот так:

<?php
if(isset($_GET['q']) AND trim($_GET['q'])){
	//тут разбираете строку полученную в параметре $_GET['q'] и в зависимости от адреса отдаете содержимое.
}else{
	eсho 'главная страница';
}

Собственно такой принцип используют все CMS

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By blackrusjew
      Добрый
      Имеем одностраничник с несколькими якорями вида https://www.site.ru/#awards
      Возможно ли через htaccess и 301редирект привести их к виду https://www.site.ru/#awards/
      Спасибо)
       
    • By d0ublezer0
      Привет!
      Хочу зафигачить ЧПУ для страниц, генерируемых фильтром.
      Ленивый разработчик (breakdesigns, привет!) ноет, что это мол ему лично это не нужно, писать роутер и вообще никому из его клиентов это не интересно. Хочу свой, с параметрами и разделами.
       
      Допустим, страница
      https://www.road.media/filter/avtomagnitoly/?custom_f_24[0]=424d57&custom_f_25[0]=5831
      где custom_f_24[0]=424d57 это марка авто BMW
      а custom_f_25[0]=5831 это модель авто X1
       
      custom_f_xxx - это фиксированные коды характеристик, участвующих в фильтрации
      424d57, 5831 и другие - это сами значения.
       
      Характеристики я смогу достать в список для формирования htaccess
      Сами значения элементов фильтра тоже подчиняются алгоритму, я могу их обратно расшифровать и сформировать список.
      Т.е. матрицу сопоставления что чему равно - я смогу собрать.
       
      Вопрос - как это сделать в .htaccess, чтобы CMS продолжила работать штатно, а посетитель и поисковик видели нормальный ЧПУ?
      Указанную выше ссылку я представляю как:
      https://www.road.media/filter/avtomagnitoly/bmw/x1
       
      Притом, могут быть более сложные варианты
      https://www.road.media/filter/avtomagnitoly/?custom_f_24[0]=424d57&custom_f_25[0]=5831&custom_f_25[1]=5835
      тут отмечены BMW, X1 и X5
      в таком случае думаю URL должен быть каким-то таким
      https://www.road.media/filter/avtomagnitoly/bmw/x1_x5
       
      Марка тоже может быть не единичной.
      Вообще набор значений может быть разным:
      https://www.road.media/filter/avtomagnitoly/?custom_f_24[0]=4d657263656465732d42656e7a&custom_f_24[1]=4c616e6420526f766572
      тут например
      4d657263656465732d42656e7a = Mercedes-Benz
      4c616e6420526f766572 = Land Rover
       
      Соответственно, ожидается ссылка вида
      https://www.road.media/filter/avtomagnitoly/land_rover_mercedes_benz
       
      Это возможно вообще?
    • By domobisnes
      Друзья, помогите понять, почему не работает автозамена расширений через htaccess. По сути должна быть замена jpg/png на webp если браузер пользователя поддерживает webp. В самом посте всегда указана картинка .jpg 
      Замена работает если только удалить в папке сайта картинку с расширением .jpg либо изменить на .jpeg (методом тыка)
      Причем я знаю, что в консоли будет все равно отражаться что у картинки расширение .jpg и факт того, что есть подмена на webp видно только в графе type консоли вебразработчика. 
      Вот, собственно код:
      <IfModule mod_rewrite.c>   RewriteEngine On   # Check if browser supports WebP images   RewriteCond %{HTTP_ACCEPT} image/webp   # Check if WebP replacement image exists   RewriteCond %{DOCUMENT_ROOT}/$1.webp -f   # Serve WebP image instead   RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1] </IfModule> <IfModule mod_headers.c>   Header append Vary Accept env=REDIRECT_accept </IfModule> <IfModule mod_mime.c>   AddType image/webp .webp </IfModule>  
    • By Pomojenko
      Буду благодарен в помощи, облазил весь интернет ничего не нашел, информацию могу оплатить, в долгу не останусь
       
      Есть сайт www.sait-x.com который нужно отобразить по средствам iframe в сайте www.sait-y.com
      для сайта www.sait-y.com, index.html :
      <html>
      <body style=margin:0px; padding: opx;">
      <iframe src="www.sait-x.com" frameborder="0" scrolling="yes" height="100%" width="100%">
      </iframe>
      </body>
      </html>
       
      Подскажите пожалуйста, очень важно, можно ли сделать на определенную страницу редирект? пример www.sait-x.com отображается полностью в www.sait-y.com а вот страница - www.sait-x.com/new в сайте будет перенаправлена допустим на страницу www.sait-y.com/new1 Или невозможно путем iframe такое выполнить?
    • By recorder
      Здравствуйте! На сайте подключен ssl, включен редирект с http на https через htaccess, нужно для определенной страницы (url) отключить https без последствий для всего сайта. Подскажите пожалуйста решение.
       
       
      htaccess:
      RewriteCond %{SERVER_PORT} 80 [OR]RewriteCond %{HTTPS} offRewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L]
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy