[英]How to hide “cgi-bin”, “.py”, etc from my URLs?
全新的網頁設計,使用python。 啟動Apache並運行,測試在cgi-bin目錄下運行的python腳本。 當我明確輸入網址時獲得有效結果:“... / cgi-bin / showenv.py”
但我不希望URL看起來那樣。 例如,在stackoverflow中,顯示在我的地址欄中的URL永遠不會有雜亂的細節顯示用於運行它們的腳本。 他們沒有cgi-bin,.py等擴展。 我怎么做?
編輯:感謝您的回復,每一個都很有幫助,很多東西要學習。 我現在正在使用URL重寫; 文檔中的示例看起來非常接近我實際想要做的事情。 但是我致力於python,因此將不得不關注WSGI。
編寫Web應用程序的python方式不是cgi-bin。 這是通過使用WSGI 。
WSGI是Web服務器和Python Web應用程序或框架之間的標准接口。 PEP 0333對其進行了定義。
使用它代替CGI沒有缺點。 你會獲得很多。 美麗的網址只是您可以輕松完成的一件巧妙的事情。
此外,編寫WSGI應用程序意味着您可以在支持WSGI接口的任何Web服務器上進行部署。 Apache通過使用mod_wsgi來實現 。
您可以在apache中配置它:
WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.py
然后, http://myserver.domain/myapp
上的所有請求都將轉到myapp.py的application
可調用,包括http://myserver.domain/myapp/something/here
。
示例myapp.py
:
def application(environ, start_response):
start_response('200 OK', [('Content-type', 'text/plain')])
return ['Hello World!']
我認為你可以通過Apache配置重寫URL來實現這一點。 您可以在此處查看Apache文檔以進行重寫。
只需使用一些優秀的Web框架,例如django,您可以擁有比URL更多的URL,您將擁有更好的基礎架構,模板,db orm等
這是我用來實現這種事情的.htaccess的摘錄,這例如將所有不是index.php的請求重定向到該文件,當然你必須檢查你重定向的文件中的服務器變量要看,請求了什么。
或者你只是制作一個重寫規則,你可以使用像^.*\\/cgi-bin\\/.*\\.py$
這樣的RegExp來確定重寫的時間和內容。 必須非常仔細地制作這樣的RegExp,以便只在需要時進行重寫。
<IfModule mod_rewrite.c>
RewriteEngine On #activate rewriting
RewriteBase / #url base for rewriting
RewriteCond %{REQUEST_FILENAME} !index.php #requested file is not index.php
RewriteCond %{REQUEST_FILENAME} !^.*\.gif$ #requested file is no .gif
RewriteCond %{REQUEST_FILENAME} !^.*\.jpg$ #requested file is no .jpg
RewriteCond %{REQUEST_FILENAME} !-d #is not a directory
RewriteRule . /index.php [L] #send it all to index.php
</IfModule>
上面的例子使用RewriteCond
itions來確定何時重寫(.gif,.jpeg和index.php被排除在外)。
嗯,這已經很久了。 希望它有點幫助,但你將無法避免學習Apache RewriteEngine的語法。
您會發現ScriptAlias
指令ScriptAlias
用。 運用
ScriptAlias /urlpath /your/cgi-bin/script.py
您可以通過http://yourserver/urlpath
訪問您的腳本。
您也可能想查看mod_passenger
,雖然上次我使用它時,WSGI在庫中是一種“二等公民” - 它可以檢測WSGI腳本,如果它用於服務整個域,但除此之外沒有指令讓它運行WSGI應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.