簡體   English   中英

使用.htaccess刪除php擴展名

[英]remove php extension using .htaccess

我正在處理腳本,並希望將鏈接設置如下:

www.mysite.com/sign-up.php
to
www.mysite.com/sign-up

www.mysite.com/profile.php?username=abc
to
www.mysite.com/profile/abc

我找到了這段代碼並為我工作。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]

但是當我想訪問時:

www.mysite.com/profile/abc

樣式表不起作用,似乎它的路徑已更改。 該個人資料中的所有鏈接也將變為:

www.mysite.com/profile/ 個人資料 /filename.php

每次都不斷添加/profile

如何解決這個問題?

編輯:除profile.php外,所有文件均可與樣式表配合使用

你可以創建htacessmodrewrite的Apache。

只需檢查以下鏈接即可生成動態URL。 它可以解決您的問題:

URL生成

你有嘗試過嗎?

RewriteRule ^(.*)$ $1.php

只需用此規則替換您當前的規則

www.mysite.com/sign-up.phpwww.mysite.com/sign-up

   RewriteEngine on
   RewriteRule ^(.*)$ $1.php [r=301,L]

需要將此文件存儲到文件夾www.mysite.com/profile/.htaccess

   RewriteEngine on /profile/
   RewriteRule ^(.*)$ profile.php?username=$1 [r=301,L]

www.mysite.com/profile/abcwww.mysite.com/profile/profile.php?username=abc

問題是,第一個腳本將重定向stringstring.php所以www.mysite.com/profile/abcwww.mysite.com/profile/abc.phpwww.mysite.com/profile/profile.php?username=abc.php 我們必須創建一個例外:

   RewriteEngine on
   RewriteRule ^profile/(.*)$ profile.php?username=$1 [r=301,L]
   RewriteRule ^(.*)$ $1.php [r=301,L]

我們可以創建整個腳本作為例外。 這將簡單地完成所有工作。

這不是您的重寫規則的問題,而是您的href的問題。

如果您有一個樣式標簽,例如... <link rel="stylesheet" type="text/css" href="css/main.css" media="screen" />和一個標簽,例如<a href="profile"> ,它們將被視為相對URL,因為開始時沒有正斜杠。 如果您的瀏覽器位於/profile.php,它將加載/css/main.css並且鏈接指向/ profile,但是一旦您位於/ profile,瀏覽器就會認為您位於該“文件夾”中,因此現在查看/profile/css/main.css,您的鏈接將轉到/ profile / profile。 您需要制作href的絕對路徑,即href =“ / css / main.css”和href =“ / profile”。

如果您的CSS鏈接斷開了,請嘗試使用文檔頭中的base標簽:

<head>
<base href="http://www.mysite.com/" />
</head>

我發現這在處理討厭的URL重寫時有效。

可能有更好的方法可以通過.htaccess解決此問題,但這可能是一個不錯的短期解決方案,直到這種情況發生。

暫無
暫無

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

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