簡體   English   中英

htaccess多個重寫規則多個子文件夾

[英]htaccess multiple rewrite rules multiple subfolders

我無法理解htaccess的工作方式。

這是文件夾結構(近似示例)

# DocumentRoot
# |-- main
# |   |-- site
# |   |   |-- assets
# |   |   |   |-- test.js
# |   |   |-- index.php
# |   |
# |   |-- common
# |   |   |-- assets
# |   |   |   |-- test.js
# |   |
# |   |-- .htaccess

這些是我希望實現的示例重定向

# http://www.example.com/main/assets/test.js            => /main/site/assets/test.js
# http://www.example.com/main/common/assets/test.js     => /main/common/assets/test.js
# http://www.example.com/main/common/path/to/file       => /main/common/path/to/file
# http://www.example.com/main                           => /main/site/index.php
# http://www.example.com/main/part/url                  => /main/site/index.php

我對htaccess文件的嘗試如下所示:

Options -Indexes
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^assets/(.*)$ site/assets/$1 [L]
RewriteRule ^common/(.*)$ common/$1 [L]
RewriteRule ^(.*)$ site/index.php [L]

我的問題:每個網址都路由到index.php。 我理解錯了什么?

當前,所有查詢和部分URL的處理都在php中進行。 我只需要提供來自兩個資產文件夾和任何其他URL的資源即可轉到index.php。

抱歉,如果這看起來像是我每天要撈的東西,但學會釣魚,即嘗試卻無濟於事。

在此先感謝您提供的所有幫助。

 RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^assets/(.*)$ site/assets/$1 [L] RewriteRule ^common/(.*)$ common/$1 [L] RewriteRule ^(.*)$ site/index.php [L] 

RewriteCond指令僅適用於隨后的第一個RewriteRule 因此,第二兩個RewriteRule指令將無條件執行(這就是為什么所有內容都被重寫為site/index.php )。

我不確定RewriteRule ^common/(.*)$ common/$1 [L]打算做什么-它看起來像一個潛在的重寫循環。

這兩個條件檢查請求是否映射到文件或目錄-似乎與您要執行的操作相反。 從您的文件夾結構/main/assets/test.js 不會映射到現有文件,因此需要重寫。

請嘗試以下操作:

 # If a request maps to a file or directory (but not the root directory) then stop
 RewriteCond %{REQUEST_FILENAME} -f [OR]
 RewriteCond %{REQUEST_FILENAME} -d
 RewriteRule . - [L]

 # Any assets (that don't exist) are rewritten to the /site/assets/ subdir
 RewriteRule ^(assets/.*) site/$1 [L]

 # Everything else is rewritten to the site/index.php file
 RewriteRule ^ site/index.php [L]

這些是我希望實現的示例重定向

請注意,這些通常稱為內部 “重寫”,而不是嚴格地稱為“重定向”。 “重定向”表示外部重定向 (即3xx響應)。 盡管Apache文檔在這方面有點模棱兩可,但在聲明時確實會將其量化為“ 內部重定向”。

暫無
暫無

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

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