簡體   English   中英

向其中添加查詢字符串行后,URL重寫不起作用

[英]URL rewriting doesn't work right after adding a query string line into it

此URL重寫行可以正常工作, 直到查詢字符串行為止 ,並且在查詢字符串之后,它們中的任何一個都不起作用。

ReWriteEngine On
ReWriteRule ^home?$ /mysite/index.php
ReWriteRule ^gallery?$ /mysite/gallery.php
ReWriteRule ^([a-z0-9]+)?$ /mysite/owner.php?name=$1
ReWriteRule ^about?$ /mysite/about.php
ReWriteRule ^location?$ /mysite/location.php

前兩行homegallery按預期工作(包括第三行查詢字符串 ),但其余兩行關於和位置不起作用。 如果我要求使用重寫的名稱來顯示這兩頁,則 這些頁面不會出現在瀏覽器中 (響應什么都沒有,除了我得到的頁面與我當前所在的頁面相同-甚至沒有收到404錯誤消息),但是如果我要求這些頁面原始名稱帶有.php擴展名的頁面該頁面進入瀏覽器。 我嘗試將這兩個about和location 放在查詢字符串行的頂部,然后這兩個頁面按預期工作正常 ,但是當它們在查詢字符串行的下面時,只有它們不起作用。 我能知道URL重寫方法有什么問題嗎? 我仍然無法解決問題。

您的嘗試有很多問題,這是一個稍作修改的版本:

ReWriteEngine On
ReWriteRule ^/?home/?$ /mysite/index.php [END]
ReWriteRule ^/?gallery/?$ /mysite/gallery.php [END]
ReWriteRule ^/?about/?$ /mysite/about.php [END]
ReWriteRule ^/?location/?$ /mysite/location.php [END]
ReWriteRule ^([a-z0-9]+)/?$ /mysite/owner.php?name=$1 [END]

規則的順序很重要。 更一般的應該放在更專業的下面

如果您遇到http狀態500(服務器內部錯誤)的情況,並且上述設置機會是您使用的Apache http服務器的版本非常舊。 在那種情況下,用[L]標志替換[END]標志,在這種情況下也應該可以正常工作。


以上規則在實際的http服務器主機配置和動態配置文件中同樣起作用。

還有一個一般性提示:您應該始終喜歡將此類規則放置在http服務器(虛擬)主機配置中,而不是使用動態配置文件( .htaccess樣式文件)。 眾所周知,這些文件容易出錯,難以調試,並且確實降低了服務器的速度。 僅當您無法控制主機配置(閱讀:真正便宜的托管服務提供商)或者您的應用程序依賴於編寫自己的重寫規則(這顯然是安全噩夢)時,才將它們作為最后一個選項來支持。 )。

我會改變這些順序

ReWriteRule ^([a-z0-9]+)?$ /mysite/owner.php?name=$1
ReWriteRule ^about?$ /mysite/about.php
ReWriteRule ^location?$ /mysite/location.php

ReWriteRule ^about$ /mysite/about.php [L]
ReWriteRule ^location$ /mysite/location.php [L]
ReWriteRule ^([a-z0-9]+)$ /mysite/owner.php?name=$1 [L]

並添加最后一個標志。

^([a-z0-9]+)? 更通用,可以在到達最后2條規則之前匹配並更改URL。

換句話說,如果您的URL與其相關about則匹配此^([a-z0-9]+)? 被更改,然后與實際規則不匹配。 因此,通過將更通用的規則放在最后,您可以避免這種情況。

就像我在評論中所說的,我會在[L] Last [L]或[ Last [L]添加[L]標志,這樣一旦完成匹配,它將結束重寫,否則您將獲得意外的匹配。

您也可以結合其中一些(可能)

 ReWriteRule ^(about|location)$ /mysite/$1.php [L]

我很確定? 表示前面的匹配是可選的,但是我刪除了它,因為如果沒有,則捕獲組是可選的。 所以我不確定您在那里擁有它的目的是什么。 因為在我閱讀時,這意味着^about?$ ,而t是可選的...

暫無
暫無

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

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