2011-07-29 28 views
2

我需要具有諸如mydomain.com/whatever之類的URL,其中「whatever」可以是任意字符串,它們將調用相同的php文件來排序顯示什麼(或顯示404)。但是,我希望文件和其他php文件正常工作(任何以別名爲單位的文件系統中實際存在的文件)。URL中的通配符(mod_alias或mod_rewrite)

一個簡單的AliasMatch /* myphpfile.php(在httpd.conf中的所有其他別名之後)在我自己的設置上正常工作,但在生產服務器上,通配符別名將所有其他php文件發送到myphpfile.php。我不確定還有什麼可能令人困惑的事情。

從技術上講,whatever字符串將是字母和小寫,所以它可以過濾,但我用正則表達式做的所有嘗試都沒有成功。

回答

2

使用這些規則(你需要mod_rewrite的):在網站根目錄的.htaccess

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/

# do not do anything for already existing files 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .+ - [L] 

RewriteRule ([a-z]+) /myfile.php [L] 
  1. 廣場。如果放置在其他地方,可能需要進行一些調整。

  2. 這將改寫(內部重定向)所有不存在單小寫字請求/myfile.php,在使用$_SERVER['REQUEST_URI']腳本可以確定哪些URL被稱爲決定完成(路由)是什麼。

  3. 這將適用於像/whatever這樣的URL,但對於/what-ever,/hello/pinky,/hello123將不起作用。

+0

謝謝,雖然它看起來像生產服務器沒有mod_rewrite,所以如果有任何方式單獨使用mod_alias,那就太棒了。 – rob

+0

@rob不幸的是我不知道如何用mod_alias完成。我建議您聯繫您的託管公司(或生產服務器的任何地方)來啓用它(mod_rewrite被廣泛使用,然後我認爲沒有這種禁用的好處 - 除非它是非常便宜的主機,在一臺服務器上有數百個站點)。 – LazyOne

+0

這是一個客戶的服務器,他們已經鎖定了。如果我可以在不干擾IT人員的情況下完成任務(並等待他解決問題),那總會更好。 :)但是,謝謝,我會繼續,告訴他們他們需要這個,並使用你的解決方案。 – rob