Удалить .php из URL

9

Ubuntu 14.04LTS 32bit

ЛАМПА

Я знаю, это старый вопрос, но..

Мне нужно, чтобы он удалял .php, где бы он ни находился, из видимого URL-адреса. Он должен работать с /showthread.php?id=XX --- > /showthread? Id = XX

Я даже не могу заставить его работать с /page.php/page. Я пробовал эти:

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

Как скрыть расширение .html с помощью Apache mod_rewrite

Удалить .php из URL-адресов с помощью htaccess

Как остановить цикл .htaccess

Он просто ничего не делает. В то время как другой код .htaccess работает нормально.

В то время как

<?php 
phpinfo();

Список mod_rewrite в загруженных модулях

и

<?php
 if(!function_exists('apache_get_modules') ){ phpinfo(); exit; }
 $res = 'Module Unavailable';
 if(in_array('mod_rewrite',apache_get_modules())) 
 $res = 'Module Available';
?>
<html>
<head>
<body>
<p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p>
</body>
</html>

Возвращает Module Available

Пробовал еще много вещей

# Apache Rewrite Rules
 <IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteBase /

# Add trailing slash to url
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
  RewriteRule ^(.*)$ $1/ [R=301,L]

# Remove .php-extension from url
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.php -f
  RewriteRule ^([^\.]+)/$ $1.php 

# End of Apache Rewrite Rules
 </IfModule>

#

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

#

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

Даже это не имеет никакого значения:

RewriteRule ^page$ page.php [L]

sudo service apache2 restart ничего не меняет.

Перезагрузка сервера ничего не меняет.

Я попытался очистить другой код внутри, не вносил никаких изменений.

Я сбросил кеш браузера 100 раз

Я начинаю думать, что это меня просто ненавидит. Что может быть причиной этого?

  • 0
    Это может быть то, что вы пытаетесь сопоставить. Вы пытаетесь использовать это в браузере showthread?id=XX RewriteRule не может соответствовать строкам запроса. Так что, вероятно, поэтому он не работает. Какова ваша главная цель?
  • 0
    Вы видели этот вопрос stackoverflow.com/questions/21617506/…
Показать ещё 12 комментариев
Теги:
.htaccess
mod-rewrite

10 ответов

3
Лучший ответ

Надежда помогла.

Это сработало для меня.

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# For LocalHost !.php
RewriteCond %{HTTP_HOST} !=localhost
RewriteCond %{HTTP_HOST} !=127.0.0.1
RewriteCond %{REMOTE_ADDR} !=127.0.0.1
RewriteCond %{REMOTE_ADDR} !=::1

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

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
Показать ещё 1 комментарий
3

Отметьте эту ссылку.

Это ответ, используя .htaccess:

RewriteEngine On

# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]

Протестировано в Windows с помощью WAMP и работает.

  • 1
    Работает на xampp хороший пример
  • 0
    Возможно ли, чтобы этот маршрут не направлялся в корень сайта? У меня есть все мои файлы php в одной подпапке
Показать ещё 6 комментариев
1

попробуйте это, чтобы удалить расширения .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 ^(.*?)/?$ $1.php [NC,L]

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

  • 0
    Даже после написания правильной RewriteBase, это не сработало - я все еще получаю ошибку «404 Not Found» при доступе к странице без расширения .php
  • 0
    Извините за задержку. Только что проверил файл htaccess моего живого сайта, и следующий код работает для него. RewriteEngine On RewriteBase / RewriteRule ^ index \ .php $ - [L] RewriteCond% {REQUEST_FILENAME}! -F RewriteCond% {REQUEST_FILENAME}! -D RewriteRule. /index.php [L]
Показать ещё 3 комментария
0

Включение mod_negotiation в моей конфигурации Apache помогло:

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

0
RewriteEngine on //replacement launch
RewriteCond %{REQUEST_FILENAME} !-d //If the requested object is not a folder
RewriteCond %{REQUEST_FILENAME}\.php -f //If the requested object to append the extension php - file
RewriteRule ^(.*)$ $1.php //make the change from concatenating .php
  • 0
    Боюсь, это не сработает. Также будьте осторожны, чтобы использовать # вместо // для комментариев, и комментарии не должны иметь ту же строку, так как это вызывает ошибку 500
  • 1
    Теперь я нашел решение Рао Асифа Раза. В любом случае, спасибо
0

Предполагая, что .htaccess обрабатывается, этот суперпростой .htaccess должен работать для вас:

RewriteEngine on
RewriteRule (.*) $1.php [END]

Если это не работает, что-то не так с вашей конфигурацией Apache. Вам нужно сначала изучить это.

Если это работает, добавьте следующую строку перед RewriteRule, чтобы разрешить использование других файлов:

RewriteCond %{REQUEST_FILENAME} !-f

Флаг END доступен с Apache 2.3.9.

  • 0
    Похоже, что .htaccess обрабатывается, так как он добавляет «.php» к URL при попытке доступа к индексу, но не для каких-либо других маршрутов. Итак, как вы говорите, возможно, конфигурация Apache неправильная. Знаете ли вы, какую настройку Apache установить?
  • 0
    Теперь я нашел решение Рао Асифа Раза
0

Это работает для меня:

    #On rewrite
    RewriteEngine On

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d

    # rewrite domain.com/username.php to username
    RewriteRule ^([A-Za-z0-9_-]+)/?$ $1.php [NC,L]
    RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/?$ $1/$2.php [NC,L]
    RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)/?$ $1/$2/$3.php [NC,L]

И еще: Посмотрите мой файл перезаписи для социального портала, например fb:

# allow only from ip range /8 /16 /24 /31
    #Order deny,allow
    #Deny from all
    #Allow from 89.230.0.0/16

    # On rewrite
    RewriteEngine On

    # [NC]- case-insensitive 
    # [L] - Last Rule , stop the rewriting process here 
    # [OR] = Or - If it matches this condition or the next 
    # [QSA] -   Append query string to rewriting url
    # [R] - redirect [R=301] move permanently, 302 - temporarily, 403 - Forbidden, 404 - Not Found,  410 - Gone

    # fix folder redirect images and css js/images/css/media
    RewriteRule ^.+?/((img|css|js|media|upload|posts)/.+)$ /$1 [L,R=301,NC]

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d
    # does not work on IIS windows server url rewrite when importing
    # RewriteCond %[REQUEST_FILENAME] !-l

    # rewrite example.xx/index.php na example.xx/
    RewriteCond %{THE_REQUEST} ^.*/index\.php 
    RewriteRule ^(.*)index\.(php|html?)$ / [R=301,NC,L]


    #portfolio rewrite folder rewrite
    # RewriteRule ^([portfolio]+)/?$ /portfolio/index.php?id=$1 [NC,L]

    # pretty url example.xx/id/post/number 
    # rewrite domain.com/username like twitter or facebook users
    RewriteRule ^([A-za-z0-9_-]+)/?$ index.php?username=$1 [NC,L]
    # domain.com/post/name
    RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/?$ profil.php?id=$1&menu=$2 [NC,L]
    # domain.com/cat/post/id
    RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/([0-9]+)/?$ profil.php?id=$1&menu=$2&page=$3 [NC,L]

    #RewriteRule ^([A-Za-z0-9_-]+)/(ustawienia)/?$ ustawienia.php?id=$1&menu=$2 [NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(wpisy)/?$ profil0.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(fani)/?$ profil1.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(ogladasz)/?$ profil2.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(zdjecia)/?$ profil3.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(video)/?$ profil4.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(ulubione)/?$ profil5.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(wiadomosci)/?$ profil6.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-za-z0-9_-]+)/?$ profil.php?id=$1 [NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/?$ profil.php?id=$1&menu=$2 [NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)/?$ index.php?id=$1&dir=$2&post=$3 [NC,L]

    # Redirect all subdomains
    # RewriteCond %{HTTP_HOST} ^(.*)\.breakermind\.com
    # RewriteRule ^(.*)$ http://breakermind.com/$1 [R=301,QSA,NC,L]

    # Redirect all subdomains
    # RewriteCond %{HTTP_HOST} ^www.ns2.breakermind.com [NC]
    # RewriteRule ^(.*)$ http://breakermind.com/$1 [R=301,QSA,NC,L]

    # RewriteCond %{HTTP_HOST} ^ns2.breakermind.com [NC]
    # RewriteRule ^(.*)$ http://breakermind.com/$1 [R=301,QSA,NC,L]

    # Redirect from www. to non-www (unhash if need)
    # RewriteCond %{HTTP_HOST} ^www.breakermind.com [NC]
    # RewriteRule ^(.*)$ http://breakermind.com/$1 [R=301,QSA,NC,L]

    # Redirect from http:// to https:// (from no-ssl to ssl)
    #RewriteCond %{SERVER_PORT} 80
    #RewriteRule ^(.*)$ https://breakermind.com/$1 [R=301,QSA,NC,L]


    ErrorDocument 400 /er404.html
    ErrorDocument 401 /er404.html
    ErrorDocument 402 /er404.html
    ErrorDocument 403 /er403.html
    ErrorDocument 404 /er404.html
    ErrorDocument 500 /er404.html
    ErrorDocument 502 /er404.html
    ErrorDocument 504 /er404.html

    #RewriteEngin On
    #RewriteCond %[REQUEST_FILENAME] !-d
    #RewriteCond %[REQUEST_FILENAME] !-f
    #RewriteCond %[REQUEST_FILENAME] !-l
    #RewriteRule ^(.+)$ index.php?c=$1 [QSA,L]
    #
    #        \w = [A-Za-z0-9_]  \d = [0-9]

И вот из моей системы блога:

        Options +FollowSymLinks
    RewriteEngine On

    RewriteCond %{THE_REQUEST} ^.*/index\.php 
    RewriteRule ^(.*)index\.(php|html?)$ / [R=301,NC,L]

    # category
    RewriteRule   ^category/?$ index.php?id=0&page=0  [NC,L]
    RewriteRule   ^category/([A-Za-z0-9]+)/?$ index.php?id=$1&page=0  [NC,L]
    RewriteRule   ^category/([A-Za-z0-9]+)/([0-9]+)/?$ index.php?id=$1&page=$2  [NC,L]
    RewriteRule   ^category/([A-Za-z0-9]+)/([0-9]+)/([A-Za-z0-9]+)/?$ index.php?id=$1&page=$2&title=$3  [NC,L]

    # autor
    RewriteRule   ^autor/?$ index.php?id=0&page=0  [NC,L]
    RewriteRule   ^autor/([A-Za-z0-9]+)/?$ index.php?id=$1&page=0  [NC,L]
    RewriteRule   ^autor/([A-Za-z0-9]+)/([0-9]+)/?$ index.php?id=$1&page=$2  [NC,L]

    # article, gallery, tags
    RewriteRule   ^article/([A-Za-z0-9]+)/?$ article.php?id=$1    [NC,L]
    RewriteRule   ^gallery/([A-Za-z0-9]+)/?$ gallery.php?id=$1    [NC,L]
    RewriteRule   ^tags/([A-Za-z0-9]+)/?$ tags.php?id=$1    [NC,L]
    RewriteRule   ^archive/([0-9]+)/([0-9]+)/?$ archive.php?year=$1&month=$2    [NC,L]

    # custom page rewrite
    RewriteRule   ^page/([A-Za-z0-9]+)/?$ page.php?id=$1    [NC,L]

    # fix folder redirect images and css js/images/css/media
    RewriteRule ^.+?/((admin|img|css|js|media|upload|posts)/.+)$ /blog/$1 [L,R=301,NC]

    # user or category user.php
    # RewriteRule   ^([A-Za-z0-9]+)/?$ index.php?user=$1  [NC,L]

    # example
    # RewriteRule ^([folder])/([category])/([A-Za-z0-9]+)/?$ index.php?id=$3&cat=$2 [NC,L]
  • 0
    Не могли бы вы дать некоторые объяснения?
  • 0
    Как и в случае с Черным Моисеем, не могли бы вы дать дополнительное объяснение, что использовать? Я попробовал первый раздел, и я боюсь, что это не сработало. Я все еще получаю ошибку «404 Not Found» при доступе к странице с расширением .php
Показать ещё 11 комментариев
0

Вы можете попробовать следующее.

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php$2 [L]
  • 0
    Боюсь, что не работает. Я все еще получаю ошибку «404 Not Found». Я, кажется, помню, как пытался это раньше
  • 0
    @Crimbo этот фрагмент локально протестирован в xampp и работает отлично, поэтому я предполагаю, что при необходимости вы должны установить Rewritebase в нужную папку.
Показать ещё 2 комментария
0

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

Ниже приведены некоторые шаги для решения вашей проблемы:

  • Прежде всего, проверьте правильность написания . Убедитесь, что оно написано правильно (в том числе в начале).
  • Проверьте права доступа к файлам. На некоторых серверах требуются исполняемые разрешения. Итак, chmod файл до 755.
  • Если у вас все еще нет работы, зайдите в конфигурацию apache (возможно, в /etc/apache 2/apache2.conf на Ubuntu) и найдите каждый экземпляр AllowOverride. Он может иметь значение "none". Вместо этого измените это на AllowOverride all.
  • Затем перейдите на сайты с поддержкой, найдите конфигурацию своего сайта и измените поля AllowOverride.
  • Перезагрузите сервер Apache и поздравляйте себя с большой чашкой кофе.

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

Удачи!

0

Возможно, это может быть дубликат, но посмотрите на это:

Как удалить .html из URL

Только в решении измените hmtl на php

  • 1
    Это решение не имеет никакого эффекта для меня

Ещё вопросы

Сообщество Overcoder
Наверх
Меню