2014-03-14 120 views
2

我想有乾淨的網址,這裏是我的代碼:乾淨的URL與htaccess的

Options -Multiviews -Indexes +FollowSymLinks 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteEngine ON 
RewriteRule ^([0-9a-z\-\_]+)?$ profile.php?q=$1 [QSA,L,NC] 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

ErrorDocument 404 /page/error?q=aqw 

唯一的問題是,我不能把一個目錄,我必須指定文件名,爲例:

<a href="site.com/help">Help</a> //this is not working 
<a href="site.com/help/index"></a> //This is working 

那麼,怎樣才能解決我認爲,由於

+0

如果你只是追加'.php'到'/ help',那麼當然這隻會找一個叫做'help.php'文件 - 如果那不存在,當然它失敗了。這取決於你指定這樣的請求應該被重寫的位置。如果你只是想讓它顯示該目錄的索引文件 - 那麼首先不要重寫目錄。 – CBroe

+0

你的意思是,我需要指定文件名?沒有解決方案? – mafitsi

+0

取決於你想要的東西。如果你可以使用'/ help /',那麼不要重寫目錄,並且讓'DirectoryIndex'指令生效。如果你堅持只使用'/ help'(而不是通過你的服務器自動重寫'/ help /'),那麼對現有目錄做一個不同的規則,並且明確地在內部重寫到索引文件。 (請注意,使用URL內沒有尾部斜槓的現有目錄可能會弄亂您在文檔中使用的相對路徑。) – CBroe

回答

0

看你的規則,我想你的第一個規則是多餘的,你可以刪除。

在您的文檔根目錄試試這個:

RewriteEngine On 
RewriteBase/

ErrorDocument 404 /error?q=aqw 

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

這在最後增加了一個斜槓 – mafitsi

+0

對不起,我的規則沒有添加/刪除斜線任何地方。你能進一步闡述一下嗎?你還有一些現有的規則嗎? – anubhava

+0

site.com/help/file.php - > site.com/help/file是的它以這種方式工作,但如果我不指定文件,我的意思是如果它是一個目錄,它會添加一個斜線,網站。 com/help /我想成爲site.com/help(閱讀索引文件) – mafitsi