2015-09-05 55 views
1

我下面.htaccess重寫規則得到錯誤裝載

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ users.php?q=$1 [QSA,L] 

但是,如果我在啊,我的網站的任何頁面輸入,腳本顯示錯誤:

Uncaught SyntaxError: Unexpected token <

此錯誤發生的原因是腳本文件中的內容被HTML代碼取代,我不知道爲什麼。

如果我在https://somesite.com/Alex/進入正常工作,如果我在https://somesite.com/users.php?q=Alex進入工作過,但是,我想,當我訪問https://somesite.com/users.php?q=Alex更換網址https://somesite.com/Alex/

那麼,如何解決錯誤並做到這一點工作?

+0

您的第二個和第三個示例網址顯示完全相同。 –

+0

是@NathanTuggy,我希望當我訪問'https://somesite.com/users.php?q = Alex'時,將URL替換爲'https:// somesite.com/Alex /'。 – Igor

+0

我認爲你需要給出一個更清晰的HTML頁面如何被破壞的例子。這聽起來不像mod_rewrite會做的事情。 – Bobulous

回答

1

使用此規則:

RewriteEngine On 
RewriteCond %{THE_REQUEST} /users\.php\?q=([^&\s]+) [NC] 
RewriteRule^%1? [NC,R,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^([^/]+)/?$ users.php?q=$1 [NC,QSA,L] 

測試基於Apache 2.4

+1

@Igor抱歉,%{THE_REQUEST}個變量名存在拼寫錯誤,我已更正它。請嘗試更新的答案。 – starkeen

+0

謝謝,現在腳本出錯了!但是,當我輸入'https://somesite.com/users.php?q = Alex'hte URL不會被'https:// somesite.com/Alex /'替代:(你能解釋我你怎麼用腳本修復錯誤?謝謝! – Igor

1

這,短小精悍...

RewriteEngine On 
RewriteRule ^([.*]+)/$ users.php?q=$1 [QSA,L] 

希望這有助於。

+0

通常包含'RewriteCond'指令來檢查請求不是真實的文件或目錄通常是明智的,否則你不可能讓用戶請求真實的目錄,例如,一個名爲'mysite.com/articles'的實際子目錄將變得無法訪問 – Bobulous

+0

@Bobulous - 所以,你說的是......如果我不把這個'RewriteCond%{REQUEST_FILENAME}!-d'和' RewriteCond%{REQUEST_FILENAME}!-f'在我的htaccess文件中,人們無法直接訪問我的站點上的某個目錄,或者到mysite.com/test/的鏈接不起作用?目錄「test」無法訪問? – Kuya

+0

是的,沒錯,'RewriteRule'將會看到「test」,並默默地將請求重寫爲「users.php?q = test」,因爲已經存在沒有'RewriteCond'來檢查「test」不是一個真正的目錄。請記住,即使使用了「RewriteCond」,用戶可能會選擇名稱「test」,然後他們將無法使用整潔的URL訪問其配置文件,因爲這樣他們會被帶到實際的目錄「測試」。出於這個原因,你會注意到這些「SEO友好」重寫通常使用路徑「/ users/test」來明確這是一個用戶名而不是目錄。 – Bobulous