Я хочу установить mod_rewrite, чтобы я мог ссылаться на страницу без расширения .php, но переписал ее, чтобы включить расширение php. Это будет работать на сервере 1 & 1.
Есть ли хорошие ссылки, чтобы я мог больше узнать себя?
Я хочу установить mod_rewrite, чтобы я мог ссылаться на страницу без расширения .php, но переписал ее, чтобы включить расширение php. Это будет работать на сервере 1 & 1.
Есть ли хорошие ссылки, чтобы я мог больше узнать себя?
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]
Принятый ответ выше не удаляет расширение .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]
Возможно, что вы действительно хотите, это просто способ не иметь суффикса вообще. лучший способ, который я нашел, заключается в использовании директивы Files в .htaccess или в Файлы конфигурации apache:
<Files myscript>
SetHandler cgi-script
</Files>
Это позволяет избежать некоторых недостатков перезаписи, например, прямого доступа .php файл.
.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
Опять же, после обновления веб-страницы вы можете получить следующую ошибку в файле 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
Теперь я могу получить доступ к файлу test.php, используя только имя файла: test
Этот параметр сделает чистые URL-адреса дружественных SEO. Расширения Removing.php из видимого URL-адреса и обеспечения доступа к URL-адресу без .php будут по-прежнему отображать .php файл. Мне не удалось найти другой ответ, который был достигнут на нескольких потоках.
Не забудьте включить функцию mod rewrite. В Debian или Unbuntu Linux будет работать
sudo a2enmod переписать
и
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/apache 2/sites-available или/etc/apache2/sites-enabled.
Похоже, переписывание из файла apache2.conf, в отличие от .htaccess, выполняется быстрее.
Получить http://example.com/test, связав http://example.com/test.php Применение:
RewriteEngine on
RewriteRule ^([^\.]+)$ /folder/$1.php [NC,L]
По какой-то причине я не смог заставить какое-либо другое решение работать исправно. Я помещал это в файл .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';
Для управления несколькими отдельными файлами может быть проще избежать RewriteEngine.
Я использовал это:
<Files $filename>
SetHandler application/x-httpd-php
</Files>
Это менее мощный и гибкий, чем переписывание, но, вероятно, быстрее и похоже на путь, если вы хотите просто иметь несколько конкретных файлов, обрабатываемых как PHP.