[英]URL Rewriting/Redirecting/Restricting on Multiple Conditions using .htaccess
服务器版本:Apache / 2.4.18(Win32)OpenSSL / 1.0.2e PHP / 7.0.8
我意识到这个问题已经问了无数次了,虽然我有一些零件的解决方案,但是我没有一个所有运动的零件都能正常工作的解决方案。
我有4种url
首先...(索引文件重定向)
http://localhost/myproject/index.php-我想要... http:// localhost / myproject
第二....(此解决方案是系统范围内必需的-用于所有.php文件) http://localhost/myproject/views/forgotpassword.php-我想要作为http:// localhost / myproject / views / forgotpassword
第三...(此解决方案是系统范围内必需的-用于所有/ views /文件) 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隐藏和重定向有效)其余视图文件夹删除和字符清理无效。 我喜欢解决方案的第一部分,因为这样我就不必修改我的代码,一切都保持不变...
经过一些重构,您的规则需要采用不同的顺序,如下所示:
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.