2013-04-08 56 views
-1

我有一大堆的mod_write規則如何解決這種改變mod_rewrite規則?

RewriteRule ^connect$ connect.php 
RewriteRule ^stuff$ stuff.php 
RewriteRule ^logout$ logout.php 

..和等。

在這個應用程序,用戶可以創建自己的網頁,並得到一個奇特的網址,例如:

www.url.com/customnamehere 

如果我有一個rewrite_rule這個它看起來是這樣的:

RewriteRule ^customenamehere$ page.php?name=customnamehere 

但是,當然,我不打算爲這些自定義頁面中的每一個手動創建一個rewrite_rule,因爲可能有很多這些自定義頁面......可能會有數千個,這會使htaccess文件變得非常巨大且性能下降。

這給我帶來了一些障礙:如何使它與最初的'固定'rewrite_rules沒有匹配,然後加載用戶頁面?我想也許我可以在一開始我所有的常規規則,然後在所有其他規則的結束,是這樣的:

RewriteRule ^(.*)$ page.php?name=$1 

我錯了。

你會如何處理這個問題?一個使用apaches外部重寫引擎的所有這些自定義名稱的數據庫,然後以某種方式包含到htaccess文件中(這似乎是一個很大的數據庫緩慢)?還是有另一種方式?

回答

1

您需要創建一個條件,以便在應用之前應用規則之一時,不會應用路由到page.php的規則。您可以通過檢查-f-d標誌來做到這一點。你也應該把L標誌在你的其他規則的結束:

RewriteRule ^connect$ connect.php [L] 
RewriteRule ^stuff$ stuff.php [L] 
RewriteRule ^logout$ logout.php [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ page.php?source_url=$1 

您還可以檢查PHP那裏,如果你想要的,因爲你可能不希望自定義名稱與「.PHP」結尾:

RewriteCond %{REQUEST_URI} !\.php$ 
RewriteRule ^(.*)$ page.php?source_url=$1 

雖然-f-d檢查可能是一個更好的方法來做到這一點。

+0

可以使用RewriteCond檢查PHP以及-f和-d檢查嗎? – willdanceforfun 2013-04-08 08:22:56

+0

@willdanceforfun是的 – 2013-04-08 08:23:23

+0

它的工作!謝謝。 – willdanceforfun 2013-04-08 08:25:11