Удалять.с расширением PHP.htaccess



Да, я читал руководство Apache и искал здесь. По какой-то причине я просто не могу заставить это работать. Самое близкое, что я пришел, - это удалить расширение, но оно указывает на корневой каталог. Я хочу, чтобы это просто работало в каталоге, который содержит .



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





  1. мне нужно его удалить .php



    а. У меня есть несколько страниц, которые используют вкладки и URL похоже на страницу.php # tab-возможно ли это?



    b. у меня есть одна страница, которая использует идентификатор сеанса, добавленный к URL, чтобы убедиться, что вы пришли из нужного места,www.domain.com/download-software.php?abcdefg.




это возможно? Также при этом мне нужно удалить".php " из ссылок в моем заголовке nav включает файл? Должен IE "<a href="support.php">support</a>" be <a href="support">support</a>?




  1. Я хотел бы заставить " www " перед каждым URL, так что это не domain.com, а www.domain.com/page.

  2. I хотелось бы удалить все конечные косые черты со страниц.


Я буду продолжать искать, пытаться и т. д. Было бы в подкаталоге вызвать какие-либо проблемы?

968   12  

12 ответов:

ответ Гамбо в вопросе переполнения стека как скрыть .html расширение с Apache mod_rewrite должно работать нормально.

Re 1) изменить .html to .php

Re a.) Да, это возможно, просто добавьте #tab к URL-адресу.

Re b.) это возможно с помощью QSA (строка запроса добавить), см. ниже.

этой должны также работать в подкаталоге путь:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

Apache mod_rewrite

то, что вы ищете-это mod_rewrite,

описание: предоставляет механизм перезаписи на основе правил для перезаписи запрошенные URL-адреса на лету.

вообще говоря, mod_rewrite работает путем сопоставления запрошенного документа с указанными регулярными выражениями, а затем выполняет перезапись URL внутри (в процессе apache) или снаружи (в браузере клиентов). Эти переписывания могут быть такими просто как внутренне переводить example.com/foo в запрос на получение example.com/foo/bar.

документы Apache включают в себя mod_rewrite руководство и я думаю, что некоторые из вещей вы хотите сделать в нем. подробное руководство и mod_rewrite.

силу www поддомена

я хотел бы заставить " www " перед каждым url, так что его нет domain.com но ... www.domain.com/page

руководство по перезаписи включает в себя инструкции для этого под Каноническое Имя пример.

удалить косые черты (Часть 1)

я хотел бы удалить все конечные косые черты со страниц

я не уверен, почему вы хотите сделать это, поскольку руководство по перезаписи включает пример для полной противоположности, т. е., всегда, включая косую черту. Документы предполагают, что удаление конечной косой черты имеет большой потенциал для причинения вопросы:

Проблема С Косой Чертой

описание:

каждый вебмастер может спеть песню о проблеме трейлинг косая черта на URL-адреса, ссылающиеся на каталоги. Если они отсутствуют, то сервер сбрасывает ошибку, потому что если вы говорите /~quux/foo вместо /~quux/foo/ затем сервер ищет файл с именем foo. И потому что этот файл каталог он жалуется. На самом деле он пытается исправить это сам большинстве случаев, но иногда этот механизм нужно эмулировать с помощью вы. Например, после того, как вы сделали много сложных URL переписывание в CGI-скриптов и т. д.

возможно, вы могли бы расширить, почему вы хотите, чтобы удалить конечную косую черту все время?

удалить .php расширение

мне нужно его удалить .php

самое близкое к этому, что я могу придумать, - это внутренне переписать каждый документ запроса с помощью один.PHP расширение, т. е., example.com/somepage вместо этого обрабатывается как запрос example.com/somepage.php. обратите внимание, что для этого потребуется, чтобы каждая somepage фактически существовала как somepage.php на файловой системе.

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

для например, это будет правильно переписать example.com/test в качестве запроса example.com/test.php:

RewriteEngine  on
RewriteRule ^(.*)$ .php

но сделает example.com не удается загрузить, потому что нет example.com/.php

я собираюсь предположить, что если вы удаляете все конечные косые черты, то выбор запроса на индекс каталога из запроса на имя файла в Родительском каталоге станет почти невозможным. Как определить запрос для каталога 'foobar':

example.com/foobar

из запроса на файл с именем foobar (который на самом деле foobar.php)

example.com/foobar

это может быть возможно, если вы использовали RewriteBase запрос на файл все еще есть .php прилагается к запросу внутренне. Запрос на привет.txt ' поместит это в ваши журналы ошибок:

[Tue Oct 26 18:12:52 2010] [error] [client 71.61.190.56] script '/var/www/test.peopleareducks.com/rewrite/hi.txt.php' not found or unable to stat

но есть и другой вариант, установить DefaultType и DirectoryIndex директивы такой:

DefaultType application/x-httpd-php
DirectoryIndex index.php index.html

обновление 2013-11-14 - Исправлен приведенный выше фрагмент, чтобы включить наблюдение никореллиуса

теперь запросы на привет.txt (и все остальное) успешны, запросы к example.com/test вернет обработанную версию теста.php, и индекс.php файлы будут работать снова.

я должен дать кредит, где кредит должен для этого решения, как я нашел его Michael J. Radwins Blog путем поиска Google для php без расширения apache.

удалить косые черты

некоторые ищут apache remove trailing slashes привел меня к некоторым страницам поисковой оптимизации. По-видимому, некоторые системы управления контентом (в данном случае Drupal) сделают контент доступным С и без конечной косой черты в URL-адресах, что в мире SEO приведет к тому, что ваш сайт понесет штраф за дублирование контента. источник

решение кажется довольно тривиальным, используя mod_rewrite переписываем при условии, что запрошенное ресурс заканчивается в / и переписать URL, отправив обратно 301 Permanent Redirect заголовок HTTP.

вот его пример, который предполагает, что ваш домен blamcast.net и позволяет запрос необязательно быть с префиксом www..

#get rid of trailing slashes
RewriteCond %{HTTP_HOST} ^(www.)?blamcast\.net$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/ [R=301,L]

теперь мы кое-что получаем. Давайте сложим все это вместе и посмотрим, как это выглядит.

обязательное www., нет .php, и никаких косых черт

это предполагает, что домен foobar.com и это так работает на стандартном порту 80.

# Process all files as PHP by default
DefaultType application/x-httpd-php
# Fix sub-directory requests by allowing 'index' as a DirectoryIndex value
DirectoryIndex index index.html

# Force the domain to load with the www subdomain prefix
# If the request doesn't start with www...
RewriteCond %{HTTP_HOST}   !^www\.foobar\.com [NC]
# And the site name isn't empty
RewriteCond %{HTTP_HOST}   !^$
# Finally rewrite the request: end of rules, don't escape the output, and force a 301 redirect
RewriteRule ^/?(.*)         http://www.foobar.com/ [L,R,NE]

#get rid of trailing slashes
RewriteCond %{HTTP_HOST} ^(www.)?foobar\.com$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/ [R=301,L]

флаг 'R' описан в RewriteRule директива разделе. Фрагмент:

redirect|R [=code] (force redirect) подстановка префикса с http://thishost[:thisport]/ (что делает новый URL URI), чтобы заставить внешнее перенаправление. Если код не задан, HTTP-ответ 302 ( ПЕРЕЕХАЛ ВРЕМЕННО) будет возвращен.

Конечная Нота

я не смог получить удаление косой черты для успешной работы. Перенаправление в конечном итоге дает мне бесконечные циклы перенаправления. После прочтения оригинальное решение ближе у меня создается впечатление, что приведенный выше пример работает для них из-за того, как настроена их установка Drupal. Он упоминает конкретно:

на обычном сайте Drupal с включенными чистыми URL-адресами эти два адреса в основном взаимозаменяемы

в отношении URL-адресов, заканчивающихся и без порезов. Кроме того,

Drupal использует файл с именем .htaccess указать web-серверу, как обрабатывать URL-адреса. Это тот же файл, который включает чистый URL-адрес Drupal магия. Добавив простую команду перенаправления в начало вашего .htaccess file, вы можете заставить сервер автоматически удалять любые завершающие слеши.

в дополнение к другим ответам выше,

вы также можете попробовать это удалить .PHP расширения полностью из вашего файла и чтобы избежать бесконечный цикл:

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ .php [NC,L]

этот код будет работать в корне/.htaccess, Обязательно измените базу перезаписи, если вы хотите поместить ее в файл htaccess в подкаталоге.

Edit:

на apache 2.4 и более поздних версиях вы также можете использовать флаг END для предотвращения ошибки бесконечного цикла. Следующий пример работает так же, как и выше на apache 2.4,

RewriteEngine on

RewriteRule ^(.+)\.php$ / [R,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /.php [NC,END]

следующий код отлично работает для меня:

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

вот метод, если вы хотите сделать это только для одного конкретного файла:

RewriteRule ^about$ about.php [L]

Ref:http://css-tricks.com/snippets/htaccess/remove-file-extention-from-urls/

после изменения параметра AllowOverride С None до All на /etc/apache2/apache2.conf (Debian 8), после этой действие .htaccess файл должен содержать только:

Options +MultiViews
AddHandler php5-script php
AddType text/html php

и этого было достаточно, чтобы скрыть .расширение PHP из файла

Не знаю, почему другие ответы не работают для меня, но этот код я нашел:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]

это все, что есть в моем htaccess и example.com/page шоу example.com/page.php

удалить .расширение php из файла PHP например yoursite.com/about.php к yoursite.com/about выполните следующие действия . Открыть.htaccess (создать новый, если он не существует) файл из корня вашего сайта, и добавить следующий код.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]

удалить .расширением HTML с помощью HTML-файл, например yoursite.com/about.html для yoursite.com/about выполните следующие действие .

открыть .htaccess Файл(Создать новый, если не существует) файл из корня вашего сайта, и добавить следующий код.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .html [NC,L]

ссылки: Как удалить расширение php из URL

Если вы пишете на PHP и хотите удалить .php, так что вы можете иметь URL, как:

http://yourdomain.com/blah -> что указывает на /бла.php

Это все, что вам нужно:

<IfModule mod_rewrite.c>
    RewriteRule ^(.+)/$ http://%{HTTP_HOST}/ [R=301,L]
</IfModule>

Если Ваш url в PHP нравится http://yourdomain.com/demo.php чем приходит вроде http://yourdomain.com/demo

Это все, что вам нужно:

создать файл .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^([^\.]+)$ .html [NC,L]
RewriteRule ^([^\.]+)$ .php [NC,L]

Я нашел 100% рабочую концепцию для меня:

# Options is required by Many Hosting
Options +MultiViews

RewriteEngine on

# For .php & .html URL's:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]
RewriteRule ^([^\.]+)$ .html [NC,L]

используйте этот код в корне вашего сайта .файле htaccess, такие как :

offline-wamp\www\YourWebDir

online-public_html/

если он не работает правильно, то измените настройки вашего Wamp Сервер: 1) щелкните левой кнопкой мыши значок WAMP 2) Apache 3) модули Apache 4) слева нажмите кнопку rewrite_module

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

## hide .php extension
# To redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L,NC]

Примечание: R=301 для постоянного перенаправления и рекомендуется использовать для SEO целей. Однако, если вы хотите просто временный редирект, замените его просто R

Comments

    Ничего не найдено.