簡體   English   中英

根目錄的Apache rewriteRule

[英]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為其別名的目錄?
你必須

  1. 使用Apache在配置中指定的目錄
  2. 編輯配置以允許您自己指定此設置,或者
  3. 選擇另一個目錄名稱。

就個人而言,我會選擇#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM