Как выполнить веб-страницу PHP без расширения .php в URL? - PullRequest
15 голосов
/ 08 апреля 2011

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

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

Спасибо!

Ответы [ 6 ]

19 голосов
/ 08 апреля 2011

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

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^product/([0-9]+)$ product.php?id=$1
13 голосов
/ 08 апреля 2011

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

 DefaultType application/x-httpd-php 

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

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

3 голосов
/ 22 июля 2018

Если вы не хотите использовать 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 голос
/ 23 января 2013

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

в " / etc / apache2 / sites-available / default " или " httpd.conf "

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

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

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

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

и создать (он может не существовать, убедитесь, чтоон может быть прочитан apache) или отредактируйте « .htaccess » в каталоге сайта (например, «/var/www/my-site/.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 голос
/ 08 апреля 2011

Это то, что фреймворки, такие как 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, которая может быть любого формата, и обработать запрос соответствующим образом.

0 голосов
/ 03 июня 2017

Я делал это годами, используя следующую команду для запуска файла с именем «Support» (НЕ Support.php, я НЕ НУЖЕН два способа получить доступ к файлу).

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

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

...