Как удалить расширение файла с адреса веб-сайта?
Я проектирую веб-сайт. Я хочу, чтобы мой адрес веб-сайта выглядел следующим образом:
Я не хочу, чтобы мой сайт выглядел как http://something.com/profile.php
Я хочу, чтобы расширение .php
было удалено в адресной строке, когда кто-то открывает мой сайт. Другими словами, я хочу, чтобы мой сайт был следующим: http://something.com/profile
В качестве второго примера вы можете посмотреть адрес веб-сайта StackOverflow.
Кто-нибудь может помочь мне в этом? Благодарю!
Ответы
Ответ 1
Просто добавьте файл .htaccess в корневую папку вашего сайта (например,/home/domains/domain.com/htdocs/) со следующим содержимым:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
Ответ 2
Сначала убедитесь, что модуль 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 для него и активировать его на вашем сервере (возможно, он уже установлен).
Ответ 3
У вас разные варианты.
Один из них создает папку с именем "профиль" и переименует ваш "profile.php" в "default.php" и помещает его в папку "profile".
и вы можете отдавать приказы на эту страницу следующим образом:
Старая страница: http://something.com/profile.php?id=a&abc=1
Новая страница: http://something.com/profile/?id=a&abc=1
Если вы не удовлетворены, оставьте комментарий для сложных методов.
Ответ 4
Проблема с созданием каталога и хранением index.php в нем заключается в том, что
- ваши ссылки с меню перестанут работать
- Будет слишком много каталогов. Например, будет отдельный каталог для каждого вопроса здесь, в stackoverflow
Решения
1. MOD REWRITE (как было предложено выше)
2. используйте php-код для динамического добавления других файлов в индексный файл. Читайте немного больше здесь http://inobscuro.com/tutorials/read/16/
Ответ 5
Вот простой способ 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.
Ответ 6
На самом деле, самый простой способ манипулировать этим -
- Откройте новую папку на своем сервере, например. "Данные"
- Поместите index.php(или index.html) в него
И тогда URL www.yoursite.com/data будет читать этот файл index.php. Если вы хотите принять его дальше, откройте в нем подпапку (например, "Список" ), поместите еще один index.php в эту папку, и вы можете запустить www.yoursite.com/data/list этот файл PHP.
Таким образом, вы можете иметь полный контроль над этим, очень полезным для SEO.
Ответ 7
http://eisabainyo.net/weblog/2007/08/19/removing-file-extension-via-htaccess/
Пожалуйста, взгляните на блог выше, он дает более подробное объяснение
Ответ 8
так же, как Игорь, но должен работать без строки 2:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Ответ 9
Удалите файл Extenstion через .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]
Ответ 10
Тони, ваш script в порядке, но если у вас есть 100 файлов? Нужно добавить этот код во все это:
include_once ( 'scripts.php');
strip_php_extension();
Я думаю, что вы включаете меню в каждый php файл (возможно, ваше меню отображается на всех ваших веб-страницах), поэтому вы можете добавить эти 2 строки кода только в свой файл меню. Эта работа для меня: D
Ответ 11
почти то же самое с первым ответом, но еще больше преимуществ.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
Просто добавьте, если у вас есть другое расширение файла на ваших сайтах.
Ответ 12
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
То же, что Джон и Игорь, работает нормально