2017-08-08 83 views
0

,當我試圖創建的htaccess一點點從什麼改變一個URL

http://localhost/website/page.php?id=_abc-123

http://localhost/website/page/_abc-123

它的作用大部分在於我可以訪問該頁面,而無需定位scriptsCSS文件。但是,如果我試圖回顯$_GET["id"],而不是_abc-123,我會得到_abc-123.php

這是我到目前爲止我htaccess的文件中:

Options +FollowSymLinks 

# remove extensions 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

# movie page 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^page/([^/]*)$ page.php?id=$1 [L] 

所有幫助表示讚賞,

感謝。

+0

不要使用'MOD-rewrite'隱藏文件擴展名,那就是'MultiViews'是。所發生的一切就是你的第一個重寫規則是匹配你想要的URL並重定向到「page/_abc-123.php」,然後由你的第二條規則 – Phil

回答

1

測試影片頁第一,並測試與PHP文件存在:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 

# movie page 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^page/([^/]*)$ page.php?id=$1 [L] 

# remove extensions 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^([^.]+)/?$ $1.php [L] 
1

首先,如果您不確定錯誤在哪裏,您可以嘗試使用.htaccess的在線工具,如htaccess.mwl.be

很明顯,您的第一個RewriteRule接口會遇到,這會導致您的「錯誤」。

有了這個工具的幫助,以及如何正則表達式的工作有一定的瞭解,我們可以修復你的.htaccess這樣:

Options +FollowSymLinks 

# remove extensions 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC] 

# movie page 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^page/([^/]*)$ page.php?id=$1 [L] 

我唯一改變的是從你的第一RewriteRule刪除「L」標誌,因爲它的RewriteCond被滿足了,但我們需要它通過第二個RewriteRule

有關L-flag的更多信息,請參閱documentation