2011-04-08 54 views

回答

18

在Web根目錄下創建.htaccess文件,並輸入以下有:

Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^product/([0-9]+)$ product.php?id=$1 
+0

使用product.php的策略是什麼?id = 777&storage = usa – Tuco 2011-04-08 00:42:29

+1

這樣只會達到9,因爲它沒有量詞?^product /([0-9] +)$ product.php?id = $ 1 – 2011-04-08 00:47:40

+1

RewriteRule^product /([0-9] +)/ storage /(.*)$ product.php?id = $ 1&storage = $ 2 – 2011-04-08 00:49:33

1

這事做與URL重寫,這是你的東西設置通常與mod_rewrite的模塊中的Apache

urlrewriting

+0

這應該已發佈爲評論。 – drudge 2011-04-08 00:21:03

+0

抱歉想幫忙,沒有評論尚未有評論。 – FRoZeN 2011-04-08 00:25:16

9

而是使用mod_rewrite你也可以用在你的.htaccess以下內容:

DefaultType application/x-httpd-php 

而只是在服務器上命名您的腳本product(不帶.php文件擴展名)。

這樣你就可以直接調用,並會接受任何附加的字符串作爲$_SERVER["PATH_INFO"]

+0

雖然這樣做有一些重要的安全隱患,特別是如果應用程序允許用戶上傳。如果惡意用戶可以上傳一個文件並用一個擴展名來命名,而這個擴展名並沒有被明確指示爲PHP以外的東西,那麼他將能夠在服務器上執行PHP代碼。 – 2011-04-08 03:12:39

+0

確實。我希望安全後果是顯而易見的。但以防萬一:該設置需要在不需要的子目錄中重置。特別是在世界可寫的領域。 (無論如何,哪個OTOH不應低於webroot) – mario 2011-04-08 03:16:17

1

這是一件框架,如笨和正如其他人所建議的,Zend可以輕鬆實現,但仍然可以通過Apache的mod_rewrite完成。基本上,通過.htaccess像這樣所有流量引導到一個頁面:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

     RewriteCond      %{REQUEST_FILENAME} !-f 
     RewriteCond      %{REQUEST_FILENAME} !-d 
    RewriteRule     ^(.*)$ index.php?_url=$1 [QSA,L] 
</IfModule> 

一旦你在該網頁上,你可以分析_url變量,它可以是任何你想要的格式,並適當地處理請求。

+0

不會CodeIgniter/Zend/Symfony /等。所有需要利用mod_rewrite來完成OP正在尋找的內容? – 2011-04-08 14:15:52

+1

是的,我的意思是,如果你只是使用'mod_rewrite',你必須自己完成所有路由,但是默認情況下,所有的路由都具有這種路由,所以你只需啓用'mod_rewrite'即可。 – 2011-04-08 14:27:03

+0

好點。感謝澄清。 – 2011-04-08 14:44:08

1

對於我這個代碼的工作:

在 「 的/ etc/apache2的/網站可用/默認」 或 「 的httpd.conf

你必須有(至少)這些選項

在默認目錄

... 
    <Directory /> 
     ... 
     Options FollowSymLinks 
     AllowOverride All 
     ... 
    </Directory> 
... 

或網站特定站點目錄

... 
    <Directory "/var/www/my-site"> 
     ... 
     Options FollowSymLinks 
     AllowOverride All 
     ... 
    </Directory> 
... 

並創建(它可能不存在,請確保它可以被apache讀取)或編輯站點目錄中的「.htaccess」(例如「/var/www/my-site/.htaccess 「),並添加以下代碼:使用下面的執行文件名爲多年

AddType application/x-httpd-php htm html php 
AddHandler application/x-httpd-php .htm .html 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
+0

如果uri是/hello.world,這個傳奇將會失敗 – Jacques 2018-01-07 06:03:53

0

我這樣做是‘支持’(NOT Support.php,我不想兩種方式來訪問該文件)。

<Files Support> 
    SetHandler php-script 
</Files> 

不過,我已經開始使用的Plesk作爲PHP 7.0執行腳本運行時與這個麻煩。根(.com/index.php)將以PHP 7運行,但我的任何php-script文件(.com/Support)都將作爲我的Plesk默認PHP 5.4版本運行。我還沒弄清楚爲什麼會這樣做,但它確實解決了設置默認處理程序的問題。