Да, я прочитал руководство по Apache и искал здесь. По какой-то причине я просто не могу заставить это работать. Самое близкое, что я пришел, - это удалить расширение, но оно указывает на корневой каталог. Я хочу, чтобы это просто работало в каталоге, содержащем .htaccess
файл.
Мне нужно сделать с .htaccess
файлом три вещи .
Мне нужно удалить .php
а. У меня есть несколько страниц, которые используют вкладки, а URL-адрес выглядит как page.php # tab - возможно ли это?
б. У меня есть одна страница, которая использует идентификатор сеанса, добавленный к URL-адресу, чтобы убедиться, что вы пришли из нужного места
www.domain.com/download-software.php?abcdefg
.
Это возможно? Также при этом нужно удалить ".php" из ссылок в моем заголовочном файле включения навигации? ДолженIE "<a href="support.php">support</a>" be <a href="support">support</a>?
- Я бы хотел, чтобы перед каждым URL-адресом было принудительно "www", так что это не так
domain.com
, ноwww.domain.com/page
. - Я хочу удалить со страниц все конечные косые черты.
Я буду искать, пробовать и т. Д. Вызвать ли какие-либо проблемы нахождение в подкаталоге?
Ответы:
Ответ Gumbo на вопрос о переполнении стека Как скрыть расширение .html с помощью Apache mod_rewrite должно работать нормально.
Re 1) Измените .html на .php
Re a.) Да, это возможно, просто добавьте
#tab
в URL.Re b.) Это возможно с помощью
QSA
(Query String Append), см. Ниже.Это также должно работать в пути к подкаталогу:
источник
[L,
пробеламиQSA]
, иначе вызовет 500 Internal Server Error ./index/bla/bla
то же самое, что иindex.php
Apache mod_rewrite
То, что вы ищете, это mod_rewrite ,
Вообще говоря,
mod_rewrite
работает путем сопоставления запрошенного документа с указанными регулярными выражениями, а затем выполняет перезапись URL-адресов внутри (в процессе apache) или извне (в браузере клиента). Эти изменения могут быть такими же простыми, как внутренний перевод example.com/foo в запрос для example.com/foo/bar.Документация Apache включает
mod_rewrite
руководство, и я думаю, что в нем описаны некоторые из вещей, которые вы хотите сделать. Подробное руководство по mod_rewrite .Принудительно
www
субдоменРуководство по перезаписи включает инструкции для этого в примере с каноническим именем хоста .
Убрать косые черты в конце (часть 1)
Я не уверен, зачем вам это нужно, поскольку руководство по перезаписи включает пример с точностью до наоборот , то есть всегда включает в себя косую черту в конце. Документы предполагают, что удаление завершающей косой черты может вызвать проблемы:
Возможно, вы могли бы подробнее объяснить, почему вы хотите все время убирать завершающую косую черту?
Удалить
.php
расширениеСамое близкое к этому, что я могу придумать, - это внутренне переписывать каждый документ запроса с расширением .php, т.е. example.com/somepage вместо этого обрабатывается как запрос для example.com/somepage.php. Обратите внимание, что для этого потребуется, чтобы каждая страница somepage действительно существовала как somepage.php в файловой системе.
В некоторой степени это должно быть возможно при правильной комбинации регулярных выражений. Однако я могу предвидеть некоторые возможные проблемы с некорректным запросом индексных страниц и некорректным соответствием каталогов.
Например, это правильно перепишет example.com/test как запрос example.com/test.php:
Но приведет к тому, что example.com не загрузится, потому что нет example.com/.php
Я собираюсь предположить, что если вы удалите все завершающие косые черты, то выбор запроса индекса каталога из запроса имени файла в родительском каталоге станет практически невозможным. Как определить запрос к каталогу foobar:
из запроса файла с именем foobar (который на самом деле является foobar.php)
Это могло быть возможно, если бы вы использовали
RewriteBase
директиву. Но если вы это сделаете, эта проблема станет намного сложнее, так как вам потребуютсяRewriteCond
директивы для проверки уровня файловой системы, отображается ли запрос на каталог или файл.Тем не менее, если вы удалите свое требование об удалении всех конечных косых черт и вместо этого принудительно добавите конечные косые черты, проблема "без расширения .php" станет немного более разумной.
Это все еще не идеально - каждый запрос файла по-прежнему имеет .php, добавленный к запросу внутри. Запрос на 'hi.txt' поместит это в ваши журналы ошибок:
Но есть еще один вариант, установить
DefaultType
иDirectoryIndex
директивы , как это:Обновление 2013-11-14 - исправлен приведенный выше фрагмент, чтобы включить наблюдение Никореллиуса.
Теперь запросы на hi.txt (и все остальное) успешны, запросы на example.com/test вернут обработанную версию test.php, а файлы index.php снова будут работать.
Я должен отдать должное этому решению, так как я нашел его в блоге Майкла Дж. Радвинса, выполнив поиск в Google по запросу php no extension apache .
Удалить завершающие косые черты
Некоторые поисковые запросы
apache remove trailing slashes
привели меня к некоторым страницам поисковой оптимизации. Очевидно, некоторые системы управления контентом (в данном случае Drupal) будут делать контент доступным с косой чертой в конце URls и без нее, что в мире SEO приведет к штрафу за дублирование контента на вашем сайте. ИсточникРешение кажется довольно тривиальным:
mod_rewrite
мы переписываем при условии, что запрошенный ресурс заканчивается на a,/
и перезаписываем URL, отправляя обратно301 Permanent Redirect
HTTP-заголовок.Вот его пример, который предполагает, что ваш домен - blamcast.net, и допускает возможность добавления префикса к запросу
www.
.Теперь мы куда-то идем. Давайте соберем все вместе и посмотрим, как это выглядит.
Обязательно
www.
, нет.php
и без слешей в концеПредполагается, что домен - foobar.com и работает на стандартном порту 80.
Флаг «R» описан в разделе
RewriteRule
директив. Фрагмент:Заключительное примечание
Мне не удалось добиться успешного удаления косой черты. В итоге перенаправление дало мне бесконечные циклы перенаправления. После ознакомления с исходным решением у меня сложилось впечатление, что приведенный выше пример работает для них из-за того, как настроена их установка Drupal. Он особо отмечает:
В отношении URL-адресов, заканчивающихся косой чертой и без нее. Более того,
источник
DirectoryIndex index index.html
? илиDirectoryIndex index.php index.html
?В дополнение к другим ответам выше,
Вы также можете попробовать это, чтобы полностью удалить расширения .php из вашего файла и избежать бесконечного цикла :
Этот код будет работать в Root / .htaccess. Обязательно измените RewriteBase, если хотите поместить его в файл htaccess в подкаталоге.
Редактировать :
В apache 2.4 и новее вы также можете использовать флаг END, чтобы предотвратить ошибку бесконечного цикла. Следующий пример работает так же, как и предыдущий для apache 2.4,
источник
У меня отлично работает следующий код:
источник
Вот способ, если вы хотите сделать это только для одного конкретного файла:
Ссылка: http://css-tricks.com/snippets/htaccess/remove-file-extention-from-urls/
источник
После изменения параметра
AllowOverride
сNone
наAll
в/etc/apache2/apache2.conf
(Debian 8), после этого файл .htaccess просто должен содержать:И достаточно было скрыть расширение .php от файлов
источник
MultiViews
это делается из коробки<a href="somepage.php">
ссылки</a>
на<a href="somepage">
ссылку</a>
в исходном кодеПопробуйте это
Следующий код определенно будет работать
источник
Не уверен, почему другие ответы не сработали для меня, но этот код, который я нашел, сработал:
Это все, что есть в моем htaccess, а example.com/page показывает example.com/page.php
источник
Чтобы удалить расширение .php из файла PHP, например yoursite.com/about.php на yoursite.com/about, выполните следующие действия. Откройте файл .htaccess (создайте новый, если он не существует) из корня вашего веб-сайта и добавьте следующий код.
Чтобы удалить расширение .html из файла html, например yoursite.com/about.html в yoursite.com/about, выполните следующие действия.
Откройте файл .htaccess (создайте новый, если он не существует) из корня вашего веб-сайта и добавьте следующий код.
Ссылка: Как удалить расширение php из URL
источник
Если вы кодируете PHP и хотите удалить .php, чтобы у вас был URL-адрес, например:
http://yourdomain.com/blah -> который указывает на /blah.php
Это все, что вам нужно:
источник
Я нашел для себя 100% рабочий Концепт:
Используйте этот код в корне файла .htaccess вашего сайта, например:
офлайн - wamp \ www \ YourWebDir
онлайн - public_html /
источник
RewriteRule
тегаL
рядом друг с другом.[L]
сообщает,mod_rewrite
что это последнее правило для указанногоRewriteCond
.Вот код, который я использовал, чтобы скрыть
.php
расширение от имени файла:Примечание:
R=301
предназначен для постоянного перенаправления и рекомендуется для использования в целях SEO. Однако, если вам нужно временное перенаправление, замените его простоR
источник
У меня получился следующий рабочий код:
источник
Если ваш URL-адрес в PHP похож на http://yourdomain.com/demo.php, чем на http://yourdomain.com/demo
Это все, что вам нужно:
создать файл .htaccess
источник
http://example.com/myfile
но не работалhttp://example.com/myfolder/
(индексный файл). Вы можете помочь мне заставить его работать с индексным файлом?Пытаться
источник