Я использую следующий файл .htaccess, чтобы мой URL оставался чистым
RewriteEngine On
RewriteRule ^([a-zA-Z\-0-9]+)/?$ index.php?get1=$1 [B]
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2&get3=$3
Пока это работает, но теперь я хочу получить доступ к каталогу.
Например. Если кто-то переходит на mysite.com/news/post-title, URL-адрес перезаписывается, и все в порядке.
Теперь я хочу иметь каталог, который можно будет просмотреть, когда кто-то перейдет на mysite.com/directory и покажет его содержимое.
Есть ли способ сделать это?
Поставить RewriteCond
перед каждым RewriteRule
, чтобы заставить RewriteRule
должны быть пропущены, если запрос сделан в место, которое является каталогом и существует.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z\-0-9]+)/?$ index.php?get1=$1 [B]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2&get3=$3
Все, что вам нужно, это фактический список каталогов. Если вы хотите разрешить пользователям также получать доступ к файлам в этих каталогах, вы также должны добавить условие для каждого из тех, кто проверяет наличие файла:
RewriteCond %{REQUEST_FILENAME} !-f
Я бы пошел на что-то вроде следующего;
<Location /Somedirectory>
Options Indexes
</Location>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule ^/Somedirectory - [L]
RewriteRule ^([a-zA-Z\-0-9]+)/?$ index.php?get1=$1 [B]
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2&get3=$3