2012-04-04 70 views
0

我已經找到了我的mod_rewrite困境的答案,我覺得我在我的智慧結束。我將有一個這樣的網址:http://www.website.com/dashboard.php?username=stackoverflow。這個網址並不是最漂亮的。所以我的目標是在這裏做一些事情...Apache mod_rewrite頁面前的查詢字符串,並刪除擴展

  1. 消除php文件的擴展(我已經能夠做到這一點與我將在下面顯示的代碼,但我不' t知道它將保持根據我需要做的其他事情)
  2. 消除「www」前綴
  3. 移動用戶名查詢字符串(僅當它是「用戶名」,我不想匹配「id 「或類似)直接在」.com /「之後
  4. 在查詢字符串後面移動php文件名(不帶擴展名)。

最終的URL應該看起來像這樣:http://website.com/stackoverflow/dashboard或者也許http://website.com/stackoverflow/profile

的代碼,我現在所擁有的,它消除了文件的擴展名是這樣的:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

# remove trailing slash ONLY if it is not an existing folder 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# rewrite to FILENAME.php if such file does exist and is not a folder 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ /$1.php [L,QSA] 

可悲的是這只是修復我的問題之一,看着它之後,我越來越覺得會有更好的方法來做到這一點...

+1

到site.com我d建議您閱讀YSlow插件中非常有趣的「優化網站」規則,並且您可能會猜測爲什麼刪除「www」,除非您的靜態內容指向另一個域名是一個壞主意。 – 2012-04-04 06:10:20

+0

啊,好點奧利維爾...這是一個很好的觀點。謝謝! – cereallarceny 2012-04-04 17:57:45

+1

在這裏閱讀這個關於www的非常好的答案:http://webmasters.stackexchange.com/questions/6107/www-yoursite-com-or-http-yoursite-com-which-one-is-futureproof – 2012-04-05 07:10:59

回答

1

(1,3,4)據我所知,你想使用漂亮的URL,但支持PHP頁面。因此,它應該是這樣的:

RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(\w+)/profile$ /dashboard.php?username=$1 [L] 

它將使http://website.com/stackoverflow/profile作爲http://www.website.com/dashboard.php?username=stackoverflow

(2) #重定向www.site.com正與301

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 
+0

如果我想想要有一個單獨的頁面(例如:home.php),然後根據我寫的if語句加載dashboard.php或profile.php的內容。該URL看起來像http://website.com/stackoverflow。用上面寫的規則可以做到這一點嗎? – cereallarceny 2012-04-04 17:41:00

+0

是的。例如。 RewriteRule ^(\ w +)$ /home.php?username=$1 [L](\ w +)模式當然可以不同。但是你需要確保你的模式不含糊。這可能會非常棘手 - 但您可以按照您希望使用這些類型的重寫的方式來組織鏈接。我爲我的網站使用這種方法。 – 2012-04-04 17:50:02

+0

精彩回答尤金。謝謝你的幫助! – cereallarceny 2012-04-07 19:37:27

相關問題