URL Rewrite: предотвращение перезаписи полностью на существующем ресурсе. - PullRequest
0 голосов
/ 07 апреля 2019

Файл .htaccess, расположенный ниже в моем корневом каталоге, служит для перезаписи всех / api /, а затем выводит пары значений ключей из URL-адреса из $ _GET в /api/api.php?

Как изменитьэто так, что все существующие файлы или папки внутри API (такие как / api / test или /api/test/file.php, доступ к которым осуществляется по этой схеме, не будут переписаны с помощью правила перезаписи?

<IfModule mod_rewrite.c> 
    Options +FollowSymlinks
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/api
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    #RewriteRule (.*) $1
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [QSA,L]
    RewriteCond %{REQUEST_URI} ^/api
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^([^/]+)/ $1/$1.php?%1 [L]
</IfModule>

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Вы можете использовать директиву RewriteCond для исключения ваших файлов и папок

RewriteEngine On
#if not a file
RewriteCond %{REQUEST_FILENAME} !-f
#not a directory
RewriteCond %{REQUEST_FILENAME} !-d
#rewrite the /api request
RewriteCond %{REQUEST_URI} ^/api
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^/]+)/ $1/$1.php?%1 [L]
0 голосов
/ 08 апреля 2019

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

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

Это привело к успешному результату в $ _GET, где в строке запроса было одинаковое количество пар lhs (ключ) = rhs (значение) при условии, что они были введены как / api / lhs / rhs / lhs / rhs в запрос.

 <IfModule mod_rewrite.c> 
    Options +FollowSymlinks
    RewriteEngine On
    DirectoryIndex api.php
    FallbackResource index.php
    RewriteCond %{REQUEST_URI} ^/api
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} ^/api
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^([^/]+)/ $1/$1.php?%1 [L]
</IfModule>

RewriteBase /api
RewriteOptions InheritDown
...