[英]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外,所有文件均可與樣式表配合使用
你有嘗試過嗎?
RewriteRule ^(.*)$ $1.php
只需用此規則替換您當前的規則
www.mysite.com/sign-up.php
到www.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/abc
到www.mysite.com/profile/profile.php?username=abc
問題是,第一個腳本將重定向string
到string.php
所以www.mysite.com/profile/abc
到www.mysite.com/profile/abc.php
或www.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.