2016-09-21 24 views
1

在我的一個網站上.htaccess正在爲鏈接工作,但php文件未檢測到GET方法。.htaccess鏈接正在工作,但沒有GET變量

我的.htaccess

ErrorDocument 404  /404 
ErrorDocument 500  /500 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
RewriteRule ^(resources)($|/) - [L] 
RewriteRule ^user/([^/]*)$ /users.php?user=$1 [L] 
RewriteRule ^dev/([^/]*)$ /dev.php?type=$1 [L] 
RewriteRule ^users/([^/]*)$ /users.php?view=$1 [L] 
RewriteRule ^users/edit/([^/]*)$ /users.php?view=edit&id=$1 [L] 
RewriteRule ^settings/([^/]*)$ /settings.php?view=$1 [L] 
RewriteRule ^groups/([^/]*)$ /groups.php?view=$1 [L] 
RewriteRule ^groups/edit/([^/]*)$ /groups.php?view=edit&id=$1 [L] 
RewriteRule ^groups/permissions/([^/]*)$ /groups.php?view=permissions.php&id=$1 [L] 
RewriteRule ^page/([^/]*)$ /page.php?view=$1 [L] 

這爲我工作在domain.com但現在不是了對domain.com/subdir 不僅如此,但並不是有更好的方法來處理GET請求重寫,所以我沒有爲每個執行GET請求的php文件添加規則?

預先感謝您。

+0

的可能的複製[重寫的.htaccess GET變量](http://stackoverflow.com/questions/7677070/htaccess-rewrite-get-variables) –

+0

您可以將所有內容重寫爲'index.php'併爲您想要使用的控制器和操作添加額外的變量。 – jeroen

+0

謝謝@Bert,但這不適合我。 Jeroen感謝我的想法,我會提出一個關於如何實現這個目標的方案 – Sjef92

回答

1

您需要關閉MultiViews選項,你還可以合併你的一些類似的規則到一個:

ErrorDocument 404  /404 
ErrorDocument 500  /500 
Options +FollowSymLinks -MultiViews 

RewriteEngine On 

RewriteRule ^(resources)($|/) - [L] 

RewriteRule ^user/([^/]+)/?$ /users.php?user=$1 [L] 

RewriteRule ^dev/([^/]+)/?$ /dev.php?type=$1 [L] 

RewriteRule ^(users|settings|groups|page)/([^/]+)/?$ /$1.php?view=$2 [L,QSA,NC] 

RewriteRule ^(users|groups)/(\w+)/([^/]+)/?$ /$1.php?view=$2&id=$3 [L,QSA,NC] 

# To internally redirect /dir/file to /dir/file.php 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 
+1

我必須在父目錄的.htaccess中添加Options + FollowSymLinks -MultiViews。結合這一個爲我工作。謝謝! – Sjef92

0

也許你應該將這個文件複製到domain.com/subdir,但這不是很好,你應該考慮使用像symfony這樣的php mvc框架,它會順利地解決你的問題,純php很難擴展。

+0

它在'domain.com/subdir'中。並且對於像這樣的小問題,更改框架似乎不是一個可行的選擇... – Sjef92

1

嘗試像這樣,

RewriteEngine on 

#if you want it to use for sub dir 
RewriteBase /subdir/ 

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

#below for url which only have view as parameter 
RewriteRule ^([\w]+)/([\w]+)$ $1.php?view=$2 [L] 

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

RewriteRule ^user/([^/]*)$ users.php?user=$1 
RewriteRule ^dev/([^/]*)$ dev.php?type=$1 [L] 

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

RewriteRule ^(.*)/edit/([^/]*)$ /$1.php?view=edit&id=$2 [QSA,L] 

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

RewriteRule ^groups/permissions/([^/]*)$ /groups.php?view=permissions.php&id=$1 [QSA,L] 
+0

感謝您的回覆,這也令我難過。 – Sjef92

+0

什麼是確切的問題請解釋?哪個網址無效。 –

+0

我已經添加了'RewriteRule^settings /([^ /] *)$ /settings.php?view=$1 [L]' 但settings.php告訴我沒有$ _GET ['view']請求。根本沒有$ _GET。 – Sjef92

相關問題