[英]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.