Я ранее настраивал свой apache2 следующим образом:
<VirtualHost _default_:443>
...
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule "^/?(.*)" "https://%{SERVER_NAME}/$1" # HTTPS auto redirect
RewriteRule "^/example/?$" "/example.json"
...
Когда я открываю example.com / example
или example.com/example/
показывает содержимое example.com/example.json
.
Затем я установил другое программное обеспечение, и оно требует доступ к / software / web
для главной веб-страницы, а каталоги, кроме web
, не должны быть открыты для публики. Итак, я пишу это:
# DocumentRoot is /var/www/html
<Directory /var/www/html/software/>
Require all denied
AllowOverride All
</Directory>
<Directory /var/www/html/software/web/>
Require all granted
AllowOverride All
</Directory>
Он работает при доступе к example.com/software/web
. Я хочу переписать ссылку, чтобы опустить часть / web
(поэтому я могу просто ввести example.com/software
), поэтому я попытался добавить это:
RewriteRule "^/software/?$" "/software/web"
Однако, когда я попытался получить доступ к сокращенному URL-адресу, он выдает ошибку 403:
You don't have permission to access /software/ on this server.
Я попытался добавить завершающую косую черту следующим образом:
RewriteRule "^/software/?$" "/software/web/"
Затем он говорит
You don't have permission to access /software/app.php on this server.
Я пробовал несколько настроек регулярного выражения, но безуспешно. Как заставить работать? Любая помощь приветствуется.
Похоже, что где-то в вашей конфигурации есть другой RewriteRule, который переписывает /software/
на /software/app.php
. Так как /software/app.php
не соответствует написанному вами регексу, он никогда не будет применен.
Вы, вероятно, захотите перенести эту перезапись ранее в вашу конфигурацию, перед той, которая добавляет app.php
. Вы также можете добавить флаг [L]
после перезаписи, если вы не хотите, чтобы после /web/
применялись новые перезаписи.