我正在嘗試使用 PHP/.htaccess 做另一個 SEO 系統...
我需要應用以下規則:
- 必須捕獲所有不以擴展名結尾的 URL (www.foo.com --> catch | www.foo.com/catch-me --> catch | www.foo.com/dont-catch.me -->不要抓住)。
- 必須捕獲所有以 .php* 結尾的 URL(.php、.php4...)(這是規則 #1 的例外情況)。
- 所有規則必須僅適用於某些目錄且不是在它們的子目錄中(到目前為止/和/framework)。
- htaccess 必須以 GET 值傳送鍵入的 URL,以便我可以在 PHP 中使用它。
任何模組重寫精靈可以幫助我嗎?
編輯:
好吧,在閱讀了建議的帖子後,我想出了這個,但我認為它陷入了循環......任何人都可以幫忙嗎?
<IfModule mod_rewrite.c>
RewriteEngine On
# 1
RewriteCond %{REQUEST_FILENAME} !\.[^/]+$ [OR]
# 2
RewriteCond %{REQUEST_FILENAME} \.php.*$
# 4
RewriteRule ^(.*)$ http://localhost/seo-urls/seo-urls-mapper.php%3Frequested=$1?%{QUERY_STRING}
</IfModule>
由於我想在聖誕假期期間完成此任務,因此我添加了賞金:) 感謝您的幫助,祝您節日快樂!
答案1
嘗試將此作為起點:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI} !\.(.*)
RewriteCond %{REQUEST_URI} !^/(framework|restricted)/
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]
RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI} \.php.?$
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]
第一個規則集:
- 如果設定了 GET 參數,請勿執行此規則
uri
(否則在附加參數後重定向到目標腳本時會出現循環uri
) - 如果 URI 包含
.
則跳過此規則集(您可能想要為特定擴充功能建立更具體的規則,但這可行) - 如果 URI 位於受限目錄下,則跳過此規則集
- 重定向到
index.php
(您可能需要更改目標)並設定uri
GET 參數
第二個規則集:
- 如果
uri
設定了該參數,則跳過此規則集以防止循環 - 如果請求的 URI 以
.php
、.php4
或類似的結尾(.php123
將不是被重定向) - 重定向到
index.php
(您可能需要更改目標)並設定uri
GET 參數
將 mod_rewrite 規則組合在一起並不需要「嚮導」 - 花一些時間自己進行實驗並閱讀 jscott 推薦的指南。
做如果您想要很好的解釋,請在這裡詢問所有理論類型的問題(而不是實踐類型的問題,在實踐類型的問題中,回答者似乎是在眾包您的專案而不是擴展您的知識) 。