簡體   English   中英

使用RewriteMap協助RewriteRule

[英]Assistance with a RewriteRule using RewriteMap

我對mod_rewrite相當陌生,並且正在嘗試使RewriteMap指令正常工作。 感謝您在使用中的幫助。

我們的URL格式如下:

example.com/section.php?xSec=[ID]

因此,對於第201節(即“ Apple iPad”),URL為:

example.com/section.php?xSec=201

我想要的是將其重寫為:

example.com/apple-ipads

我已經使用以下行在apache配置中定義了RewriteMap txt文件:

RewriteMap sections txt:/var/www/rewrites/sections.txt

該txt文件包含以下內容:

multifunction-printers 102
inkjet-printers 103
laser-printers 104
apple-ipads 201

我嘗試在.htaccess中使用以下重寫規則:

RewriteRule ^/section.php?xSec=(.*) ${sections:$1}

這不起作用。 我假設RewriteRule存在問題,或者我將RewriteMap指令放在配置文件中的錯誤位置。 有什么建議么?

提前致謝

丹尼爾

您可以使用以下重寫:

RewriteRule ^/(.*) /section.php?xSec=${sections:$1|NOTFOUND}

對於發送到的每個請求:

example.com/apple-ipads

您應該透明地看到答案來自:

example.com/section.php?xSec=201

如果找不到密鑰,則答案來自:

example.com/section.php?xSec=NOTFOUND

但是您必須知道,這種重寫是行不通的,例如,當您有空格或其他字符(àèò...)可以由瀏覽器編碼時。

您的地圖向后。 該密鑰應首先列出。

201 apple-ipads

我相信您不應該在模式的開頭加上/以及其他一些東西; 也就是說,假設您的ID僅是數字,則更好的模式是:

RewriteRule  ^section\.php\?xSec=(\d+)$  ${sections:$1}  [nocase]


更新

我只需要用uri做一些htaccess的工作,而我需要grep查詢字符串。 這篇出色的文章對我們很有幫助。 以前的模式不起作用。 這個應該:

RewriteCond   %{QUERY_STRING}   xSec=(\d+)$   [nocase]
RewriteRule   ^section\.php$   ${sections:%1}?  [nocase,redirect=perm,last]

如果要在鍵不匹配(未調試)時默認使用原始查詢字符串:

RewriteCond   %{QUERY_STRING}   xSec=(\d+)$   [nocase]
RewriteRule   ^section\.php$   ${sections:%1?|$0?id=%1}  [nocase,redirect=perm,last]


更新2

最后一個示例中的語法是錯誤的,因為? 在$ {}函數的匹配端。 此后,我使用以下內容更新了自己的規則:

# mapped
RewriteCond   %{QUERY_STRING}   xSec=(\d+)$   [nocase]
RewriteCond   ${sections:%1|NOTFOUND}   !NOTFOUND   [nocase]
RewriteRule   ^section\.php$   ${sections:%1}?  [nocase,redirect=perm,last]

使用這組規則,只有帶有映射(查詢)鍵的uri才會被重定向。

干杯。

暫無
暫無

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

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