![](/img/trans.png)
[英]correct Apache RewriteCond and RewriteRule when using RewriteMap?
[英]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]
最后一個示例中的語法是錯誤的,因為? 在$ {}函數的匹配端。 此后,我使用以下內容更新了自己的規則:
# 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.