簡體   English   中英

htaccess-刪除擴展名-允許或強制使用斜杠而不破壞相關鏈接

[英]htaccess - removal of extension - allow or force trailing slashes without breaking relative links

在此先感謝您的幫助!

我想要達到的目的是:我想使用htaccess從文件名中刪除文件擴展名-這是我所做的。 但是,當用戶將其瀏覽器指向沒有擴展名的文件並添加斜杠時,出現頁面未找到錯誤。 我找到了一些可以糾正此問題的代碼,但是,當我實現代碼時,它破壞了我與位於頭部的CSS和jQuery的相對鏈接。

我確實很想保留與我所有文件的相對鏈接,但也希望對單個文件使用斜杠。

這可能嗎?

我的網站在這里: http://www.getagig.info : http://www.getagig.info

和我當前的htaccess代碼(下面僅刪除擴展名)。

RewriteEngine on

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

也許嘗試:

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”,則可以為此設置單獨的規則。

添加行:

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

我認為如果您將/附加到URL,則無法測試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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM