[英]Apache rewriteRule for root directory
建立網站時,我曾經在.htaccess中使用以下規則:
RewriteRule ^test/(.*) cgi-bin/router.py?request=$1 [NC]
每當用戶訪問mysite.com/test/something
他們就會被重定向到cgi-bin/router.py?request=something
。 效果很好。 我現在已經完成了該站點,並想“打開它”。 但是,簡單地從規則中刪除test/
位是行不通的,盡管應該按照此處和此處進行操作 :
RewriteRule ^(.*) cgi-bin/router.py?request=$1 [NC]
我也嘗試過^$
但是隨后我松開了用戶在url中鍵入的內容。
我的正則表達式弄錯了嗎?
嘗試在其前面添加一個/
,並在其末尾添加一個$
。
喜歡:
RewriteRule ^/(.*)$ cgi-bin/router.py?request=$1 [NC]
此外,我發現最好在測試時使用RewriteBase
指令。 然后,您可以更改它,而不必與正則表達式本身搞混。
RewriteBase /test/
RewriteRule ^(.*)$ cgi-bin/router.py?request=$1 [NC]
而且,當移至現實世界時:
RewriteBase /
RewriteRule ^(.*)$ cgi-bin/router.py?request=$1 [NC]
編輯
經過更多測試之后,我發現問題可能不在於表達式本身,而是目錄名稱: cgi-bin/
。 默認情況下,Apache使用此目錄存儲CGI腳本,但使用ScriptAlias
將/cgi-bin/*
請求重定向到另一個目錄。 在我的情況下,Apache安裝目錄中的目錄名稱相同。
這是您自己創建的目錄,還是您使用Apache為其別名的目錄?
你必須
就個人而言,我會選擇#3。 我嘗試了一下,對我來說效果很好。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !bin/
RewriteRule ^(.+) bin/request.php?ctrl=$1 [NC,L]
</IfModule>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.