2011-03-25 80 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> 
相關問題