我有一个小问题,强制在网址中删除.php文件扩展名。
如果用户:
,我已成功删除.php文件扩展名#Remove PHP if original request is /foo/bar.php
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$"
RewriteRule ^(.*)\.php(\?.*)?$ $1$2 [R=301,L]
我的目标是在以下情况下删除扩展程序:
# Remove PHP if original request is /foo.php/bar
我问,因为现在用户可以转到该网址并输入http://www.site.com/contact.php/about,它将呈现我的关于页面。我的目标是强制删除.php并渲染: http://www.site.com/contact/about
我希望获取上面的代码并将其添加到但我无法理解。
TIA
答案 0 :(得分:2)
以下 .htaccess 为我提供了所需的参数,您可以获得“页面”
AddDefaultCharset utf-8
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
DirectoryIndex index.php
RewriteRule ^([a-zA-Z0-9_-]{3,20})/([^/]+)/([^/]+)?$ index\.php?page=$1&s=$2&o=$3 [L]
RewriteRule ^([a-zA-Z0-9_-]{3,20})/([^/]+)?$ index\.php?page=$1&s=$2 [L]
RewriteRule ^([a-zA-Z0-9_-]{3,20})/?$ index\.php?page=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]{3,20})?$ index\.php?page=$1 [L]
ErrorDocument 404 /404
获取“page”参数然后像这样调用
include('inc/'.$_REQUEST['page'].'.php');
并记得从链接中删除.php
分机
答案 1 :(得分:1)
看起来你有删除部分,但你错过了内部重写部分。您尝试从URL中删除php
并将客户端重定向到没有它的URL。但是您的条件不匹配请求,请将其更改为:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ .*\.php.*$
RewriteRule ^(.*)\.php(.*)?$ /$1$2 [R=301,L]
然后你需要在内部重写它(不要重定向浏览器)。因此,在同一个htaccess文件中,添加:
RewriteCond %{REQUEST_URI} ^/([^/]+)(.*)$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^([^/]+)(.*)$ /$1.php$2 [L]
答案 2 :(得分:0)
用这一个替换你的拖曳线:(你的规则中有错误,这就是为什么它没有在中间检测到.php而你不需要重写条件)
RewriteRule ^(.+)\.php(/.*)?$ /$1$2 [L,R=301]
答案 3 :(得分:0)
我对这些问题的解决方案是基本上避免使用复杂的重写规则,并通过简单的前端控制器从php端进行URL路由。
在您网站的根目录下写下以下.htaccess文件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]
然后在同一目录中写入index.php文件。 在index.php文件中,您仍然可以获取整个URL信息,并根据此选择要包含的PHP文件。
<?php
// urldecode and get rid of the query string, $_GET is still available
$url = urldecode(preg_replace('/\\?(.*)$/', '', $_SERVER['REQUEST_URI']));
if ($url == '/contact/about') {
include 'contact.php';
}
这个例子非常基本,我可能忽略了你网站架构的细微之处,但从长远来看,这种方法更加可行,因为你可以真正将你喜欢的任何URL映射到PHP脚本而不必忍受mod_rewrite的复杂性。
这是几乎所有现有PHP框架(至少是MVC框架)采用的模式。
这种方法的极简主义示例可以在Slim micro框架中找到:http://www.slimframework.com/