Apache-2.4
Apache2 RewriteRule 不起作用
我之前像這樣配置了我的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/
。