2016-09-17 93 views
1

我嘗試這樣的鏈接重定向:的.htaccess重寫規則不重定向頁面

http://spicyyeti.com/strangers/2

爲它的等效:

http://spicyyeti.com/strangers/strangers.php?img=2

等在.htaccess香港專業教育學院寫:

RewriteRule ^/strangers/([0-9]+)$ /strangers/strangers.php?img=$1 [R=301] 

但是沒有事情正在發生。我看不出有什麼不對 - 我是按錯誤順序寫的嗎?這裏是我的全部的.htaccess以防萬一有什麼東西引發衝突的,我沒有看到:順便說一下,哪一個環節將在瀏覽器實際顯示

# use php in html files i think 
AddHandler application/x-httpd-php5 .html 

DirectoryIndex home.html 

RewriteEngine On 

#removes html extension 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.html [NC] 

RewriteRule ^/strangers/([0-9]+)$ /strangers/strangers.php?img=$1 [R=301] 

+0

你的第一條規則是匹配並重寫'陌生人/ 2.html',我假設你的服務器上不存在,所以你會得到一個404. – Vrac

回答

1

你的第一條規則是要匹配和重寫strangers/2.html,你需要一個條件,從第一條規則排除strangers URI:

RewriteBase/
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^/strangers/.*$ 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 

RewriteRule ^strangers/([0-9]+)$ /strangers/strangers.php?img=$1 [L] 

我從最後一個規則取出301標誌。我假設你不想重定向到/strangers/strangers.php?img=2,而是在瀏覽器url欄中顯示strangers/2,而apache執行/strangers/strangers.php?img=$1

+0

謝謝,這工作。我們如何從.html擴展刪除中排除陌生人目錄,但是在重寫中我們引用了沒有擴展名的模式? – carrmx

+0

'RewriteCond'只是一個與瀏覽器請求的字符串匹配,它不是指真正的目錄。它將匹配任何以'/ strangers /'開頭的URI,'。*'基本上是通配符。如果你願意,你也可以在那裏放置一個圖案。重寫小程序的第一個參數也是如此,它是與所請求的瀏覽器進行字符串匹配。你也可以把陌生人/(.*)$放在那裏,它會採取任何與([0-9] +)相對的東西,它只能匹配和捕獲從0到9的數字。 – Vrac