簡體   English   中英

.htaccess 用帶參數的假目錄重寫規則

[英].htaccess rewrite rule with a fake directory with a parameter

所以我想知道如何在我有一個目錄的地方說 domain.com/main/ 並且在那個 /main 我有 license.php 和 .htaccess 我怎么能在我可以做的地方做 domain.com/main /view/license/(license) 並顯示他們 domain.com/license.php?id={license} 我試過這個但它不起作用

這是我目前使用的 .htaccess,我試圖讓它與它一起工作

<IfModule mod_rewrite.c>
  RewriteRule ^/view/license/([a-zA-Z0-9\-/\.]+)/?$ license.php?id=$1 [L]
</IfModule>

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]```

利用

RewriteRule ^main/view/license/([a-zA-Z0-9\-/\.]+)/?$ license.php?id=$1 [L]

main添加到規則中,並刪除第一個斜杠。

在 http 服務器的DOCUMENT_ROOT文件夾中的動態配置文件(“.htaccess”樣式文件)中實施此規則,或者最好在真實主機配置中實施:

RewriteEngine on
RewriteRule ^/?main/view/license/?$ /license.php [END]
RewriteRule ^/?main/view/license/([^/]+)/?$ /license.php?id=$1 [END]

如果您使用上述規則收到內部服務器錯誤(http 狀態 500),那么您很可能操作的是非常舊版本的 apache http 服務器。 在這種情況下,您將在 http 服務器錯誤日志文件中看到不支持的[END]標志的明確提示。 您可以嘗試升級或使用舊的[L]標志,在這種情況下它可能會起作用,盡管這取決於您的設置。

此實現同樣適用於 http 服務器主機配置或動態配置文件(“.htaccess”文件)。 顯然重寫模塊需要在 http 服務器內部加載並在 http 主機中啟用。 如果您使用動態配置文件,您需要注意它的解釋在主機配置中完全啟用,並且它位於主機的DOCUMENT_ROOT文件夾中。

和一般性評論:您應該始終更喜歡將此類規則放在 http 服務器主機配置中,而不是使用動態配置文件(“.htaccess”)。 這些動態配置文件增加了復雜性,通常是意外行為的原因,難以調試,並且它們確實減慢了 http 服務器的速度。 它們僅在您無法訪問真正的 http 服務器主機配置(閱讀:非常便宜的服務提供商)或堅持編寫自己的規則的應用程序(這是一個明顯的安全噩夢)的情況下作為最后一個選項提供。

暫無
暫無

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

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