需要 .htaccess URL 重寫器的協助

需要 .htaccess URL 重寫器的協助

我正在嘗試使用 PHP/.htaccess 做另一個 SEO 系統...

我需要應用以下規則:

  1. 必須捕獲所有不以擴展名結尾的 URL (www.foo.com --> catch | www.foo.com/catch-me --> catch | www.foo.com/dont-catch.me -->不要抓住)。
  2. 必須捕獲所有以 .php* 結尾的 URL(.php、.php4...)(這是規則 #1 的例外情況)。
  3. 所有規則必須僅適用於某些目錄且不是在它們的子目錄中(到目前為止/和/framework)。
  4. 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]

第一個規則集:

  1. 如果設定了 GET 參數,請勿執行此規則uri(否則在附加參數後重定向到目標腳本時會出現循環uri
  2. 如果 URI 包含.則跳過此規則集(您可能想要為特定擴充功能建立更具體的規則,但這可行)
  3. 如果 URI 位於受限目錄下,則跳過此規則集
  4. 重定向到index.php(您可能需要更改目標)並設定uriGET 參數

第二個規則集:

  1. 如果uri設定了該參數,則跳過此規則集以防止循環
  2. 如果請求的 URI 以.php.php4或類似的結尾(.php123不是被重定向)
  3. 重定向到index.php(您可能需要更改目標)並設定uriGET 參數

將 mod_rewrite 規則組合在一起並不需要「嚮導」 - 花一些時間自己進行實驗並閱讀 jscott 推薦的指南。

如果您想要很好的解釋,請在這裡詢問所有理論類型的問題(而不是實踐類型的問題,在實踐類型的問題中,回答者似乎是在眾包您的專案而不是擴展您的知識) 。

相關內容