是否可以更改页面上的所有链接以删除扩展名。
Example:
www.domain.com/index.php
changes to
www.domain.com/index
我希望页面上的实际链接发生变化,以便当用户将鼠标悬停在链接上时,它没有php扩展名,而不是每次都进行重定向。我不确定它是否可行,但我更愿意这样做,而不是必须更改我的所有代码以删除php扩展。
我也可以重写每个链接,例如:
www.domain.com/index?id=12&sid=2
to
www.domain.com/index/id/12/sid/2
或者我必须为我想要为其执行的每个页面手动执行此操作。
先谢谢你的帮助!
答案 0 :(得分:1)
不确定。我想我会通过使用输出缓冲来做到这一点。所以我把ob_start();在页面顶部(在任何输出之前),然后在底部$ contents = ob_get_contents();
然后你需要一组正则表达式来进行更改。这里的详细信息取决于您构建网站的方式,例如是否有完整的URL或相关链接;如果你对使用属性等的双引号或单引号保持一致,那就像:
$urls = preg_match_all( '|href="http://www.domain.com/[^"]+\.php?[^"]+"|', $contents, $m );
foreach( $m as $u ) {
$n = preg_replace( "/\?|=|&/", '/', $u );
$contents = str_replace( $u, $n, $contents );
}
$contents = preg_replace( '|(href="http://www.domain.com/[^"]+)\.php|', $1, $contents );
echo $contents;
答案 1 :(得分:0)
删除.php很简单,添加重写可能很棘手。
wordpress(以及许多其他脚本)的方式是通过重定向PHP脚本的所有内容:
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
您可以阅读代码并向后设计类似的解决方案。
或者,如果网址始终相同(例如,始终为id = 12& sid = 2类型的东西),则可以添加重写规则 - 例如:
RewriteRule ^/index\.php\/?id\=([0-9]+)&sid=([0-9]+)$ /index/id/{$1}/sid/{$2}
这只是伪语法可能需要检查。
另外,您使用的是预先打包的软件包吗?如果是这样,它可能已经有了选项。请告诉我们。
答案 2 :(得分:0)
首先,您应该在根目录中添加一个.htaccess文件,其中包含以下内容:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /router.php
这将做什么:将每个请求重定向到router.php文件中不存在的文件。我这样做,在我的router.php文件中,我检查了什么是url(www.domain.com/index)然后包含好文件。示例:
$requestURI = explode('/', trim($_SERVER['REQUEST_URI']));
if (isset ($requestURI[1]) && (resquestURI[1] === "index"){
require "index.php";
}
else {
//file not found
}
对于“?”。我认为你不能删除它,它用于将你的GET参数与网址分开。