Как это сделать hide.php расширение в.htaccess [дубликат]


Возможный Дубликат:
Удалите расширение .php с помощью .htaccess

Я пытаюсь скрыть расширение файла .php, но по какой-то причине не могу заставить его работать. Моя последняя попытка была следующей:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^folder/([a-zA-Z_\-0-9]+)/?$ /folder/$1.php
</IfModule>

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

Author: Community, 2011-12-04

3 answers

Я использовал это:

RewriteEngine On

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]

См. также: этот вопрос

 83
Author: ryanve, 2017-05-23 12:26:08

Другим вариантом использования PHP-скриптов без расширения является

Options +MultiViews

Или даже просто следуя в каталогах .htaccess:

DefaultType application/x-httpd-php

Последнее позволяет обрабатывать все имена файлов без расширения script как PHP-скрипты. В то время как мультивидения заставляют веб-сервер искать альтернативы, когда предоставляется только базовое имя (однако это снижает производительность).

 14
Author: mario, 2011-12-03 22:53:39

1) Вы уверены, что модуль mod_rewrite включен? Проверить phpinfo()

2) Ваше вышеупомянутое правило предполагает, что URL-адрес начинается с "папки". Правильно ли это? Вы действительно хотели, чтобы в URL-адресе была папка? Это будет соответствовать URL-адресу, например:

/folder/thing -> /folder/thing.php

Если вы действительно хотите

/thing -> /folder/thing.php

Вам нужно удалить папку из выражения соответствия.

Я обычно использую это для маршрутизации запроса на страницу без php (но ваш должен работать, что наводит меня на мысль, что mod_rewrite может быть не включено):

RewriteRule ^([^/\.]+)/?$ $1.php  [L,QSA]

3) Предполагая, что вы объявляете свои правила в файле.htaccess, позволяет ли ваша установка переопределять параметры настройки (AllowOverride) в файлах.htaccess? Некоторые общие хосты этого не делают.

Когда сервер находит файл .htaccess (как указано Имя файла доступа) ему необходимо знать, какие директивы, объявленные в этом файле, могут переопределять более раннюю информацию о доступе.

 6
Author: typeoneerror, 2011-12-03 22:54:47