簡體   English   中英

用 .htaccess 重寫位於子目錄中的網站的 url

[英]Rewrite the url of a website living in a subdirectory with .htaccess

我目前正在編寫一個網站,簡而言之,它通過 url 參數和 php 包括動態加載其內容。 該網站位於根目錄下名為“saischek”的子文件夾中。

url 有一個可選參數: page ,因此 url 可以如下所示:

localhost/saischek/index.php?page=accounting
localhost/saischek/index.php

我想讓我的網址看起來像這樣:

localhost/saischek/accounting
localhost/saischek/home <- if the url parameter _page_ isn't given

我的 .htaccess 文件目前位於子目錄“saischek”中,如下所示:

RewriteEngine on
RewriteRule ^saischek/([a-zA-Z0-9_-]+)$ saischek/index.php?page=$1

該網站在 apache 網絡服務器上運行,“httpd.conf”文件中的所有必要更改都已完成並正常工作。

我會說,在對問題的評論中的討論以及您對問題的修訂幾乎就在那里,您自己找到了解決方案......

我建議稍微更改主要規則,您還需要處理您提到的“主頁”頁面

RewriteEngine on
RewriteCond %{REQUEST_URI} !/saischek/index\.html$
RewriteRule ^/?saischek/home/?$ /saischek/index.php [QSA,END]
RewriteRule ^/?saischek/([a-zA-Z0-9_-]+)/?$ /saischek/index.php?page=$1 [QSA,END]

但是我想知道你為什么要使用“home”slug,為什么不簡單地使用https://example.org/saischek而不是https://example.org/saischek/home 在這種情況下,您將嘗試此變體:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/saischek/index\.html$
RewriteRule ^/?saischek/?$ /saischek/index.php [QSA,END]
RewriteRule ^/?saischek/([a-zA-Z0-9_-]+)/?$ /saischek/index.php?page=$1 [QSA,END]

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

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

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

添加試試? 並將 + 更改為 * 因為如果頁面丟失,URL 不會同時擁有它們..(/和頁面)。

^saischek/([a-zA-Z0-9_-]+)/?([a-zA-Z0-9_-]*)$

暫無
暫無

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

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