簡體   English   中英

php mvc – 從 URL 中刪除公共

[英]php mvc – Remove Public from URL

我知道這是一個非常受歡迎的問題,但我無法在我的項目中找到可行的解決方案我想將我的文檔根目錄設置為公用文件夾

例如,將 url 從 /public/login 更改為 /login

.htaccess代碼

  RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?$1 [L,QSA]

有時.htacess代碼由於mod_rewrite而無法工作。 使用mod_rewrite enable嘗試一次。 或者,您可以將 index.php 文件從公用文件夾移動到主文件夾,並更新index.php文件中使用的鏈接。 另一種方法是使用php artisan serve運行項目並使用您使用過的 htaccess。

我想說這是對您提出的問題的直接答案:

RewriteEngine On
RewriteRule ^/?public/(.*)$ /%1 [QSA,R=301,END]
RewriteRule ^ /public%{REQUEST_URI} [QSA,END]

但我認為這更多的是你真正需要的,你的問題很模糊:

RewriteEngine On
RewriteRule ^/?public/(.*)$ /%1 [QSA,R=301,END]
RewriteRule ^ /public/index.php?%{REQUEST_URI} [QSA,END]

顯然,需要將重寫模塊加載並啟用到 http 服務器中,如果您真的想使用分布式配置文件(“.htaccess”),則必須在 http 服務器的主機配置中授予對分布式配置文件(“.htaccess”)的解釋。

最好先從 302 臨時重定向開始,然后再將其更改為 301 永久重定向,前提是您確定一切都已正確設置。 這可以防止在嘗試時出現緩存問題......

如果您使用上述規則收到內部服務器錯誤(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