Apache-2.4

Apache2 RewriteRule 不起作用

  • March 24, 2019

我之前像這樣配置了我的apache2:

<VirtualHost _default_:443>
   ...
   RewriteEngine on
   RewriteCond %{HTTPS}  !=on
   RewriteRule "^/?(.*)" "https://%{SERVER_NAME}/$1"    # HTTPS auto redirect
   RewriteRule "^/example/?$" "/example.json"
   ...

當我訪問example.com/exampleexample.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/

引用自:https://serverfault.com/questions/959680