2014-12-01 41 views
2

我試圖寫一個重寫規則的作品是這樣的:

www.sitename.com/products.php?p=product&c=category 

應該成爲

www.sitename.com/product/category 

我曾嘗試以下,但我的正則表達式的知識是不是很理想,以下不起作用

RewriteRule ^(.*)/(.*)$ products.php?p=$1&c=$2 [QSA,L] 

任何幫助,非常感謝!

+0

它位於直接在網站上,沒有其他規則的根源。 – 2014-12-01 20:07:07

+0

需要更多信息。你想用這個規則處理的URL是什麼?有更多規則等嗎? – anubhava 2014-12-01 20:20:56

+0

我只想把它的兩個變量products.php重定向到site.com/var1/var2。我希望所有其他途徑都能夠發揮作用並保持一致。我將要添加的唯一其他規則是'RewriteRule ^(。*)\。html $ $ 1 \ .php [QSA,L]',因此它將PHP擴展轉換爲簡單文件的html。 – 2014-12-01 20:28:17

回答

1

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代碼:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([\w-]+)/([\w-]+)/?$ products.php?p=$1&c=$2 [QSA,L] 

RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC] 
RewriteRule ^(.+?)\.html$ $1.php [NC,L] 
+0

這部分工作,但我想它必須比我的代碼更多。我在我的本地主機上測試這一切,並且所有內容都在一個文件夾中。所以我通過http:// localhost/sitename /訪問網站。我已經將RewriteBase更改爲/ sitename /,並且第一部分(products.php一)工作正常,但不幸的是,php到html文件名的轉換返回「未找到」。任何想法我做錯了什麼?謝謝! – 2014-12-01 20:57:08

+1

對於這種情況需要:'RewriteCond%{DOCUMENT_ROOT} /sitename/$1\.php -f [NC]' – anubhava 2014-12-01 21:03:05

+0

完美,謝謝! – 2014-12-01 21:12:30

1

嘗試([^/]+)

+0

這似乎已經做到了,但不幸的是,現在像www.site.com/fund/aaa/bula/a任何路徑將去products.php ... – 2014-12-01 19:52:34

+1

是的,我喜歡做所有的第一個uri段我的路線因爲這個原因是靜態的。 – AlienWebguy 2014-12-01 20:04:07

+0

我怎樣才能使該部分靜態,以避免這種行爲?謝謝! – 2014-12-01 20:09:47

0

更換(.*)嘗試是這樣的:

RewriteRule www.sitename.com/(.*)/(.*) $products.php?p=$1&c=$2 [QSA,L] 

可以在this site測試重寫規則。

+0

不幸的是你的代碼不起作用。資源網站看起來不錯,不幸的是,似乎也沒有工作。也許我錯過了一些東西。 – 2014-12-01 19:51:05