URL重写/重定向/使用的.htaccess

问题描述:

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

对于某些部分重构你的规则需要以不同的顺序是这样的:

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]