并提前感谢您的帮助!
我想要实现的是:我想使用htaccess从文件名中删除文件扩展名 - 这就是我所做的。但是,当用户将浏览器指向没有扩展名的文件并添加尾部斜杠时,我会收到页面未找到错误。我找到了一些代码来纠正这个问题,然而,当我实现代码时,它打破了我对CSS和jQuery的相对链接。
我真的很想保留所有文件的相对链接,但也希望允许单个文件的斜杠。
这可能吗?
我的网站在这里:http://www.getagig.info
我当前的htaccess代码(仅删除扩展名在下面)。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
答案 0 :(得分:3)
也许试试:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)/?$ $1.php
编辑:我从下面的评论中了解到你的问题是什么,但我已经看过你的网站了,我有点困惑你为什么要这样做。
根据我的理解,您真正想要的是yourwebsite.com/filename或yourwebsite.com/filename/使用filename.php,在这种情况下,您最好使用.htaccess规则,如下所示:< / p>
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/?$ $1.php
这仍然应该允许加载CSS和JS文件,以及服务器上实际存在的任何文件或目录。如果您不希望人们实际调用“filename.php”,那么您可以为此设置单独的规则。
答案 1 :(得分:0)
如果你的网址上附有/
,我认为无法测试文件是否存在于 RewriteCond 中。
我能想到的唯一解决方案就是使用htaccess重定向到一些可以解决问题的php文件:
htaccess的:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !\.php$
RewriteRule ^(.*?)/?$ route.php?url=$1
.php文件
<?php
$url = $_GET['url'];
if (strpos($url, '..') !== false || strpos($url, '/') !== false) {
echo "No relative urls!";
} else if (file_exists($url)) {
// do what you want - require or redirect to the requested file
} else {
// requested file does not exist
}
答案 2 :(得分:0)
添加行:
<BASE href="http://www.sitename.com/">
到我<head>
标记内的页面对我来说很有用。它甚至可以编码为PHP函数自动化,因此您不必在其他场合复制/粘贴。
<强>更新强>
<?php
$BaseDir = 'http://'.$_SERVER['SERVER_NAME'].substr($_SERVER["SCRIPT_NAME"], 0, strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
?>
<head>
...
<BASE href="<?php echo $BaseDir; ?>">
...
</head>