也許你應該弄清楚什麼是預期的行爲,當用戶試圖達到真正的網址:
www.example.com/public/file1/
如果防止你的意思是保佑,你可以添加一個規則與403
迴應
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !/public/
RewriteRule ^(.*)$ /public/$1 [L]
RewriteCond %{REQUEST_URI} /public/
RewriteRule ^(.*)$/[R=403,L]
</IfModule>
更新:上述解決方案不起作用!
我意識到我以前的解決方案總是拋出403,所以它是毫無價值的。實際上,這有點棘手,因爲重定向本身在URL中確實包含/public/
。
,真正爲我工作的解決方案是一個祕密查詢字符串追加到重定向和檢查上的URL包含/public/
這個值:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !/public/
RewriteRule ^(.*)$ /public/$1?token=SECRET_TOKEN [L]
RewriteCond %{REQUEST_URI} /public/
RewriteCond %{QUERY_STRING} !token=SECRET_TOKEN
RewriteRule ^(.*)$/[R=403,NC,L]
</IfModule>
這樣www.example.com/file1/
將顯示file1
,但www.example.com/public/file1/
會拋出403 Forbidden錯誤響應。
擔憂安全這個SECRET_TOKEN
的在這裏討論:How secure is to append a secret token as query string in a htaccess rewrite rule?
如果你的URL的預期有它自己的查詢字符串,如www.example.com/file1/?param=value
一定要加的標誌QSA。
RewriteRule ^(.*)$ /public/$1?token=SECRET_TOKEN [QSA,L]
歡迎來到Stack Overflow!在編輯之前,您可能會收到一些降薪,因爲您最初的問題缺乏任何研究工作。我建議你參加[歡迎導覽](https://stackoverflow.com/tour),並在[幫助頁面]上閱讀[提問問題](https://stackoverflow.com/help/asking)( https://stackoverflow.com/help)。 –