如何自动从网址中删除文件名?

时间:2016-08-01 16:26:50

标签: php apache friendly-url

我已经在使用RewriteEngine和RewriteConditions从文件名中删除.php部分。

但是,我最近访问了此网站http://poorlydrawnlines.com/comic/tragedy/。在其中,只是乱七八糟,我试图找到实际的文件名,结果证明是index.php。但是,当我尝试转到http://poorlydrawnlines.com/comic/tragedy/index.php时,该网站会自动将网址缩短为http://poorlydrawnlines.com/comic/tragedy/。这种行为是如何实现的?

另外,假设页面的原始地址以index.php结尾,我是否正确?或者该网站只是重定向我?如何在我自己的网站上重新创建?

3 个答案:

答案 0 :(得分:3)

由于您尚未提供原始.htaccess代码,因此这是我能做的最好的事情。

RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L] 

答案 1 :(得分:1)

您只需调整RewriteCondition以在请求的网址中查找index.php并将其删除,而不是仅删除.php扩展名。

编辑举例:

RewriteEngine On
RewriteCond "%{REQUEST_URI}" "(.*)/index\.php"
RewriteRule ".*" "%1/" [R=301,L]

RewriteCond用于捕获文件夹/路径名,然后RewriteRule重定向到它而没有文件名。这也保留了任何查询字符串参数。

答案 2 :(得分:0)

除了@cmorrissey回答之外,这个脚本也可以做到这一点,没有mod_rewrite

$lookup = 'index.php';
$parts = explode('?', $_SERVER['REQUEST_URI']);
if(substr($parts[0], -(strlen($lookup))) == $lookup){
    header('location: ./');
    die();
}