2017-03-06 172 views
0

Server版本限制取決於多個條件:阿帕奇/ 2.4.18(Win32的)的OpenSSL/1.0.2e PHP/7.0.8URL重寫/重定向/使用的.htaccess

我意識到這個問題已經被問過無數時間,而我在零部件的解決方案,我沒有在所有運動部件正常工作的解決方案..

我有4種類型的url

首先...(索引文件重定向)

http://localhost/myproject/index.php - 我希望... http://localhost/myproject

二....(這個解決方案是必需的系統範圍 - 適用於所有.php文件) http://localhost/myproject/views/forgotpassword.php - 我想作爲 http://localhost/myproject/views/forgotpassword

三...(需要此解決方案系統範圍 - 爲所有/視圖/文件) http://localhost/myproject/views/forgotpassword.php - 我想作爲 http://localhost/myproject/forgotpassword

四...(這個解決方案是隻有兩個文件)

http://localhost/myproject/views/propertydetail.php?property_id=4 - 我想作爲 http://localhost/myproject/property/4

我想限制對所有以前的名稱和路徑(我認爲這是不可能的,因爲這樣做會使代碼無法正常工作 - 即沒有這樣做,之後的作品),所以我想重定向將被使用,但如果需要可能的限制......

以下是我綜合.htaccess文件

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

## hide .php extension 
## To externally redirect /dir/foo.php to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R,L,NC] 

## To internally redirect /dir/foo to /dir/foo.php 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule^%{REQUEST_URI}.php [L] 


## hide views folder 
RewriteRule ^$ views/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ views/$1 

## remove special characters and clean the urls 
RewriteRule ^property/([0-9]+) views/propertydetail.php?property_id=$1 
RewriteRule ^user/([0-9]+) views/viewprofile.php?profile_id=$1 

與此僅第一部分(PHP的隱藏和重定向工作)休息views文件夾清除和字符清理不起作用。我喜歡的解決方案,因爲當時我沒有改變我的代碼的第一部分,一切依舊...

+0

確定你有正確的'RewriteBase'值。暫時留下線路。 – Deadooshka

+0

刪除重寫基地正在myproject/index.php其他地方..也像myproject/views/forgotpassword.php所有舊的鏈接不重定向到myproject /忘記密碼,進一步所有myproject /忘記密碼沒有得到他們的CSS這是存儲在myproject/css/- 這是否意味着我必須通過我的整個代碼,並更改鏈接,不能像它的工作方式.php擴展正在處理內部和外部 – DragonFire

+0

外部重定向意見 - > non-views'RewriteCond%{THE_REQUEST} \ h/views(/ \ S *)RewriteRule ^%1 [R,L]' – Deadooshka

回答

2

對於某些部分重構你的規則需要以不同的順序是這樣的:

ErrorDocument 404 default 
Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase /myproject/ 

## hide .php extension 
## To externally redirect /dir/foo.php to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R=301,L,NE] 

## remove special characters and clean the urls 
RewriteRule ^property/(\d+)/?$ views/propertydetail.php?property_id=$1 [L,QSA,NC] 
RewriteRule ^user/(\d+)/?$ views/viewprofile.php?profile_id=$1 [L,QSA,NC] 

## hide views folder 
RewriteRule ^$ views/ [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(?!view/)(.*)$ views/$1 [L,NC] 

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