Удаление расширения .php с помощью mod_rewrite - PullRequest
39 голосов
/ 05 февраля 2011

Мне нужен набор правил mod_rewrite, чтобы я мог ссылаться на страницу без расширения .php, но переписать его, чтобы включить расширение php.Это будет работать на сервере 1 & 1.

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

Ответы [ 8 ]

53 голосов
/ 05 февраля 2011
RewriteEngine On
RewriteRule something something.php [L]

http://example.com/something будет обрабатываться так, как если бы это был запрос для something.php

Для перенаправления всех запросов , которые не являются физическим файлом с тем же именем, но с.php:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]
12 голосов
/ 29 июня 2016

Принятый ответ выше не удаляет расширение .php из URL, оно просто позволяет вам посещать .php файлы без расширения. Чтобы полностью удалить расширение .php из URL, вы можете использовать следующие правила в root/.htaccess:

RewriteEngine on

#1)externally redirect "/file.php" to "/file"   
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
#2)Internally map "/file" back to "/file.php"
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,L]
4 голосов
/ 10 ноября 2013

Возможно, что вы действительно хотите, это просто способ не иметь суффикса вообще. лучший способ сделать это - использовать директиву Files в .htaccess или в конфигурационные файлы apache:

<Files myscript>
   SetHandler cgi-script
</Files>

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

2 голосов
/ 15 ноября 2016

.htaccess файл: добавьте следующие строки:

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

https://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-htaccess/

Теперь вам нужно проверить условие AllowOverride в файле apache2.log: установить параметры AllowOverRide All в корневом веб-каталоге:

    Options Indexes FollowSymLinks  
    AllowOverride All  
    Require all granted

Если вы попытаетесь получить доступ к своей веб-странице без расширения .php, вы можете столкнуться со следующей ошибкой в ​​файле apache error.log: /var/www/html/web/.htaccess: недопустимая команда 'RewriteEngine', возможно, с ошибкой или определена модулем, не включенным в конфигурацию сервера

Чтобы исправить это: у вас не установлен модуль mod_rewrite, чтобы установить его: Выполните следующую команду: ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load

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

Опять же, после обновления веб-страницы вы можете получить следующую ошибку в файле error.log:

[negotiation:error] [pid 4650] [client 127.0.0.1:46461] AH00687: Negotiation: discovered file(s) matching request: /var/www/html/web/test (None could be negotiated). (I was trying to access localhost/web/test.php using the url: localhost/web/test)

Чтобы исправить это, вам нужно добавить следующие строки в apache2.conf:

<IfModule mod_mime.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .html
AddType application/x-httpd-php-source .phps

https://forums.digitalpoint.com/threads/htaccess-addtype-application-x-httpd-php-php-htm-html-and-maybe-a-fix.7584/#post-2491687

Теперь я могу получить доступ к файлу test.php, используя только имя файла: test

1 голос
/ 10 декабря 2016

Эта опция сделает чистые SEO дружественные URL-адреса.Удаление расширений .php из видимого URL-адреса и обеспечение доступа к URL-адресу без .php будет по-прежнему отображать файл .php.Я не смог найти другой ответ, который достиг этого в нескольких потоках.

Не забудьте включить переписывание модов.В Debian или Unbuntu linux будет работать следующее:

sudo a2enmod rewrite

и

sudo service apache2 restart

Измените соответствующий раздел вашего apache2.confфайл к следующему.

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule (.*) $1.php [L]
        RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
        RewriteRule ^ /%1 [NC,L,R]
</Directory>

Если вы используете .htaccess для перезаписи, убедитесь, что по крайней мере в apache2.conf включены эти параметры.

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        RewriteEngine On
</Directory>

Наконец, на некоторых установках Apache выможет также потребоваться установить AllowOveride All в файле .conf в / etc / apache2 / sites-available или /etc/apache2/sites-enabled.
Перезапись из файла apache2.conf, в отличие от .htaccess, по слухамБыстрее.

0 голосов
/ 11 октября 2016

Для направления нескольких отдельных файлов может быть проще избежать RewriteEngine.

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

<Files $filename>
   SetHandler application/x-httpd-php
</Files>

Это менее мощно и гибко, чем перезапись, но, вероятно, быстрее и кажется подходящим вариантом, если вы хотите, чтобы несколько конкретных файлов обрабатывались какPHP.

0 голосов
/ 07 июля 2015

По какой-то причине я не смог заставить работать любое другое решение.Я положил это в .htaccess файл в корне моего сайта.Надеюсь, это сработает для вас.

RewriteEngine on #only use this once per .htaccess
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

Важно помнить, что если ваш заголовок или URL-адрес содержит расширение .php, он не будет удален.Вам нужно будет удалить расширение.

Используйте это ...

header 'location: /login';

вместо этого ...

header 'location: /login.php';
0 голосов
/ 19 мая 2015

Для получения http://example.com/test связывания http://example.com/test.php используйте:

RewriteEngine on
RewriteRule ^([^\.]+)$ /folder/$1.php [NC,L] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...