htaccess - 删除扩展名 - 允许或强制拖尾斜杠而不破坏相对链接

时间:2011-03-25 12:58:14

标签: php apache .htaccess hyperlink

并提前感谢您的帮助!

我想要实现的是:我想使用htaccess从文件名中删除文件扩展名 - 这就是我所做的。但是,当用户将浏览器指向没有扩展名的文件并添加尾部斜杠时,我会收到页面未找到错误。我找到了一些代码来纠正这个问题,然而,当我实现代码时,它打破了我对CSS和jQuery的相对链接。

我真的很想保留所有文件的相对链接,但也希望允许单个文件的斜杠。

这可能吗?

我的网站在这里:http://www.getagig.info

我当前的htaccess代码(仅删除扩展名在下面)。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

3 个答案:

答案 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>