2011-03-25 71 views
0

并提前感谢您的帮助!htaccess - 删除扩展名 - 允许或强制结尾的斜杠而不会破坏相关链接

我想要实现的是这样的:我想从文件名中使用htaccess删除文件扩展名 - 这是我所做的。但是,当用户将他们的浏览器指向没有扩展名的文件并添加了斜线时,我会收到页面未找到错误。我发现一些代码纠正了这种情况,但是,当我实现代码时,它破坏了我与CSS和位于头部的jQuery的相关链接。

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

这可能吗?

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

而且我现在的htaccess的代码(仅删除扩展正下方)。

RewriteEngine on 

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

回答

3

也许尝试:

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

编辑:我从下面的问题就是您的评论理解,但我在您的网站采取一看,我有点困惑,为什么你试图这样做。

根据我的理解,您真正想要的只是yourwebsite.com/filename或yourwebsite.com/filename/使用filename.php,在这种情况下您最好使用如下所示的.htaccess规则:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]*)/?$ $1.php 

这应该仍然允许加载您的CSS和JS文件,以及您的服务器上实际存在的任何文件或目录。如果你不想让人们在物理上调用“filename.php”,那么你可以为此设置一个单独的规则。

+0

我是这么认为的,以在第一,但这个问题是,第二个'RewriteCond'仍然会失败(因为没有'文件名/ .php'文件... – Czechnology 2011-03-25 13:05:15

+0

如何让htaccess忽略.css .js文件? – 2011-03-25 14:06:45

+0

@科技:好的,我明白你的问题是什么。我已经编辑了上面的答案,并附加了一些建议。看看是否有帮助。 – 2011-03-25 14:54:52

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 
} 
+0

我希望不必这样做,因为它会降低网站的速度...... – 2011-03-25 14:05:47

+0

是不是可以让htaccess忽略.css和.js文件? – 2011-03-25 14:06:10

+0

你是什么意思,“忽略”?如果你引用RewriteRule,你可以这样扩展RewriteCond: 'RewriteCond%{REQUEST_FILENAME}!\。(php | css | js)$'。 – Czechnology 2011-03-25 14:19:21

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> 
相关问题