Как выполнить веб-страницу PHP без the.php расширение в URL-адресе?


Извините за вопрос noob, не могу понять, из чего я должен искать.

Я создаю сайт с этой страницей product.php?id=777
Я бы хотел, чтобы это было product/777

Спасибо вам!

Author: Tuco, 2011-04-08

6 answers

Создайте файл .htaccess в корневом каталоге вашего веб-сайта и введите там следующее:

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^product/([0-9]+)$ product.php?id=$1
 18
Author: arma, 2011-04-08 10:10:06

Вместо использования mod_rewrite вы также можете использовать в своем.htaccess следующее:

 DefaultType application/x-httpd-php 

И просто назовите свой скрипт product на сервере (без расширения файла .php).

Таким образом, вы можете вызвать его напрямую и получите любую добавленную строку как $_SERVER["PATH_INFO"]

 10
Author: mario, 2011-04-08 00:23:06

Это то, что фреймворки, такие как CodeIgniter и Zend, выполняют с легкостью, но все еще могут быть выполнены только с помощью Apache mod_rewrite, как предлагали другие. В принципе, используйте .htaccess, подобный этому, чтобы направлять весь трафик на одну страницу:

<IfModule mod_rewrite.c>
    RewriteEngine On

        RewriteCond                     %{REQUEST_FILENAME} !-f
        RewriteCond                     %{REQUEST_FILENAME} !-d
    RewriteRule                 ^(.*)$ index.php?_url=$1 [QSA,L]
</IfModule>

Как только вы попадете на эту страницу, вы сможете проанализировать эту переменную _url, которая может быть любого формата, который вы хотите, и соответствующим образом обработать запрос.

 1
Author: Jimmy Sawczuk, 2011-04-08 00:23:33

Для меня этот код работает:

В "/etc/apache2/сайты-доступны/по умолчанию" или "httpd.conf"

У вас должны быть (по крайней мере) эти параметры в каталоге по умолчанию

...
    <Directory />
        ...
        Options FollowSymLinks
        AllowOverride All
        ...
    </Directory>
...

ИЛИ в каталоге конкретного сайта

...
    <Directory "/var/www/my-site">
        ...
        Options FollowSymLinks
        AllowOverride All
        ...
    </Directory>
...

И создайте (он может не существовать, убедитесь, что он доступен для чтения apache) или отредактируйте ".htaccess" в каталоге сайта (например, "/var/www/мой сайт/.htaccess") и добавьте этот код:

AddType application/x-httpd-php htm html php
AddHandler application/x-httpd-php .htm .html

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
 1
Author: Simone Dagli Orti, 2016-04-08 16:40:57

Если вы не хотите использовать mod_rewrite (я этого не делал), а другие ответы, похоже, не сработали для вас (они не сработали для меня). Тогда вы можете попробовать это, если вы работаете на Apache 2.4+.

Более небезопасная версия: сделайте что-нибудь без расширения, запускаемое как PHP-файл (это не так уж плохо, если, как в моей реализации, у вас есть только один файл для всего сервера, но все равно оставило бы вас открытым для произвольного выполнения, если бы кто-то смог записать файл в этот каталог... тогда опять же, если они могут написать файл, они могли бы дать ему расширение PHP, поэтому не совсем уверены, действительно ли это расширяет ваши возможности.)

<FilesMatch "^[^.]+$">
    ForceType application/x-httpd-php
</FilesMatch>

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

Если вы хотите сделать его более конкретным (и, возможно, более безопасным), вы можете просто заменить регулярное выражение чем-то более конкретным:

<FilesMatch "^MySingleFileWithNoExension$">
    ForceType application/x-httpd-php
</FilesMatch>

Затем просто перезапустите Apache, и все готово!

 1
Author: Matthew Bradford, 2018-07-22 16:06:27

Я делал это в течение многих лет, используя следующее для выполнения файла с именем "Поддержка" (НЕ Support.php, Я не хотел двух способов получить доступ к файлу).

<Files Support>
    SetHandler php-script
</Files>

Однако у меня начались проблемы с этим при использовании Plesk для выполнения сценариев как PHP 7.0. Корневой (.com/index.php ) будет работать как PHP 7 просто отлично, но любой из моих файлов php-скриптов (.com/Support) будет работать как моя версия PHP 5.4 по умолчанию Plesk. Мне еще предстоит выяснить, почему он это делает, но это обходится проблема установки обработчика по умолчанию.

 0
Author: JBH, 2017-06-03 03:21:14