Как удалить расширение файла с адреса сайта? - PullRequest
51 голосов
/ 30 июня 2011

Я занимаюсь дизайном сайта. Я хочу, чтобы адрес моего сайта был похож на следующее изображение:

file name extensions like (PHP/JSP) are hidden

Я не хочу, чтобы мой сайт выглядел как http://something.com/profile.php Я хочу, чтобы расширение .php было удалено в адресной строке, когда кто-то открывает мой сайт. Другими словами, я хочу, чтобы мой сайт был похож на: http://something.com/profile

В качестве второго примера вы можете посмотреть на адрес веб-сайта StackOverflow.

Может кто-нибудь помочь мне в этом? Спасибо!

Ответы [ 10 ]

72 голосов
/ 30 июня 2011

Просто добавьте файл .htaccess в корневую папку вашего сайта (например, /home/domains/domain.com/htdocs/) со следующим содержимым:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
13 голосов
/ 28 сентября 2013

Сначала убедитесь, что модуль mod_rewrite установлен. Тогда будьте осторожны, чтобы понять, как это работает, многие люди понимают это задом наперед.

Вы не скрываете URL или расширения. То, что вы делаете, это создаете НОВЫЙ URL, который направляет на старый, например

URL для размещения на вашем веб-сайте будет yoursite.com/play?m=asdf

или еще лучше

yoursite.com / asdf

Хотя каталог asdf не существует. Затем с установленным mod_rewrite вы помещаете это в .htaccess. По сути, он говорит, что если запрошенный URL-адрес НЕ является файлом и НЕ является каталогом, направьте его в мой скрипт:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /play.php [L] 

Почти готово - теперь вам просто нужно написать кое-что в ваш PHP-скрипт, чтобы разобрать новый URL. Вы хотите сделать это так, чтобы старые тоже работали - вы поддерживаете систему, в которой переменная всегда одинакова ИЛИ создаете таблицу базы данных, которая соотносит «SEO-дружественный URL» с Код товара. Примером может быть

/ Some-Cool-Video (равняется идентификатору продукта в формате asdf)

Преимущество этого? Поисковые системы будут индексировать ключевые слова "Some Cool Video". ASDF? Кто будет искать это?

Я не могу дать вам подробности, как это запрограммировать, но возьмите строку запроса, зачистите ее до конца

yoursite.com/Some-Cool-Video 

превращается в "asdf"

Затем установите переменную m на это

м = asdf

Таким образом, оба URL будут по-прежнему идти к одному и тому же продукту

yoursite.com/play.php?m=asdf 
yoursite.com/Some-Cool-Video 

mod_rewrite может сделать много других важных вещей, Google для него и активировать его на вашем сервере (он, вероятно, уже установлен).

4 голосов
/ 30 июня 2011

У вас есть разные варианты. Один из них - создать папку с именем «profile», переименовать ваш «profile.php» в «default.php» и поместить в папку «profile» и вы можете отдавать приказы этой странице следующим образом:

Старая страница: http://something.com/profile.php?id=a&abc=1

Новая страница: http://something.com/profile/?id=a&abc=1

Если вы не удовлетворены, оставьте комментарий для сложных методов.

2 голосов
/ 29 января 2015

Вот простой PHP-способ, которым я пользуюсь.
Если страница запрашивается с расширением .php, то выполняется новый запрос без расширения .php.Расширение .php больше не отображается в поле адреса браузера.

Я придумал это решение, потому что ни одно из многих предложений .htaccess не сработало для меня, и это было быстрее реализовать в PHP, чем пытаться выяснить, почему .htaccess не работал на моем сервере.

Поместите это в начале каждого PHP-файла (желательно, прежде всего):

include_once('scripts.php');  
strip_php_extension();  

Затем поместите эти функции в файл 'scripts.php':

//==== Strip .php extension from requested URI  
function strip_php_extension()  
{  
  $uri = $_SERVER['REQUEST_URI'];  
  $ext = substr(strrchr($uri, '.'), 1);  
  if ($ext == 'php')  
  {  
    $url = substr($uri, 0, strrpos($uri, '.'));  
    redirect($url);  
  }  
}  

//==== Redirect. Try PHP header redirect, then Java, then http redirect
function redirect($url)  
{  
  if (!headers_sent())  
  {  
    /* If headers not yet sent => do php redirect */  
    header('Location: '.$url);  
    exit;  
  }  
  else  
  {
    /* If headers already sent => do javaScript redirect */  
    echo '<script type="text/javascript">';  
    echo 'window.location.href="'.$url.'";';  
    echo '</script>';  

    /* If javaScript is disabled => do html redirect */  
    echo '<noscript>';  
    echo '<meta http-equiv="refresh" content="0; url='.$url.'" />';  
    echo '</noscript>';  
    exit;  
  }  
}  

Очевидно, вам все еще нужно настроить Apache для перенаправления любого запроса без расширения в файл с расширением.Вышеупомянутое решение просто проверяет, имеет ли запрошенный URI расширение, запрашивает ли он URI без расширения.Затем Apache выполняет перенаправление в файл с расширением, но в поле адреса браузера отображается только запрошенный URI (без расширения).Преимущество состоит в том, что все ваши ссылки "href" в вашем коде могут по-прежнему иметь полное имя файла, например, расширение .php.

2 голосов
/ 14 апреля 2013

Проблема с созданием каталога и сохранением в нем index.php заключается в том, что

  1. Ваши ссылки с меню перестанут работать
  2. Там будет слишком много каталогов. Например, здесь будет отдельный каталог для каждого вопроса здесь на stackoverflow

Решения 1. MOD REWRITE (как предложено выше) 2. использовать php-код для динамического включения других файлов в индексный файл. Прочитайте немного больше об этом здесь http://inobscuro.com/tutorials/read/16/

1 голос
/ 21 июня 2017

Тони, твой сценарий в порядке, но если у тебя есть 100 файлов?Нужно добавить этот код во все эти:

include_once ('scripts.php');
strip_php_extension ();

Я думаю, что вы включаете меню в каждыйPHP-файл (возможно, ваше меню отображается на всех ваших веб-страницах), поэтому вы можете добавить эти 2 строки кода только в ваш файл меню.Эта работа для меня: D

1 голос
/ 08 апреля 2015

Удалить расширение файла через .htaccess

Оригинальный URL: http://ravinderrathore.herobo.com/contact.php

Правило htaccess для удаления расширения файлов .php, .html и т. Д. Из URL.

RewriteRule ^(.*)$ $1.php

After Rewriting: http://ravinderrathore.herobo.com/contact

RewriteEngine on

RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/

RewriteRule ^index(.*)?$ index.php$1 [L,QSA]

RewriteRule ^login_success(/)?$ login_success.php [L,QSA]

RewriteRule ^contact(/)?$ contact.php [L,QSA]
1 голос
/ 18 сентября 2013

то же самое, что и Игорь, но должно работать без строки 2:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
1 голос
/ 01 января 2012

На самом деле, самый простой способ манипулировать этим - это

  1. Откройте новую папку на вашем сервере, например, "Данные"
  2. Поместите в него index.php (или index.html)

И тогда URL www.yoursite.com/data прочитает этот файл index.php. Если вы хотите пойти дальше, откройте в нем подпапку (например, «Список»), поместите в эту папку еще один index.php, и вы сможете www.yoursite.com/data/list запустить этот файл PHP.

Таким образом, вы можете иметь полный контроль над этим, очень полезно для SEO.

0 голосов
/ 28 ноября 2016

почти то же самое, что и в первом ответе, но есть еще одно преимущество.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

Просто добавьте, если у вас есть другое расширение файла на ваших сайтах

...