Przeniosłem instalację WordPress do nowego folderu na serwerze Windows / IIS . Ustawiam przekierowania 301 w PHP, ale wygląda na to, że nie działa. Adresy URL moich postów mają następujący format:
http:://www.example.com/OLD_FOLDER/index.php/post-title/
Nie mogę dowiedzieć się, jak pobrać /post-title/
część adresu URL.
$_SERVER["REQUEST_URI"]
- co wszyscy wydają się zalecać - zwraca pusty ciąg. $_SERVER["PHP_SELF"]
właśnie wraca index.php
. Dlaczego tak się dzieje i jak mogę to naprawić?
Odpowiedzi:
Może dlatego, że korzystasz z usług IIS,
jest tym, czego chcesz, na podstawie adresów URL, których użyłeś do wyjaśnienia.
W przypadku Apache użyłbyś
$_SERVER['REQUEST_URI']
.źródło
Notice: Undefined index: PATH_INFO in /home/tdpk/public_html/system/config.php on line 14
źródło
Apache:
Możesz także użyć
HTTP_HOST
zamiast,SERVER_NAME
jak skomentował Herman. Zobacz to pokrewne pytanie, aby uzyskać pełną dyskusję. Krótko mówiąc, prawdopodobnie nie masz nic przeciwko korzystaniu z jednego z nich. Oto wersja „hosta”:Dla paranoików / Dlaczego to ma znaczenie
Zwykle ustawiam
ServerName
w formacie,VirtualHost
ponieważ chcę , aby była to kanoniczna forma witryny.$_SERVER['HTTP_HOST']
Jest ustawiony na podstawie nagłówków żądań. Jeśli serwer odpowie na jakąkolwiek / wszystkie nazwy domen pod tym adresem IP, użytkownik może sfałszować nagłówek lub, co gorsza, ktoś może wskazać rekord DNS na Twój adres IP, a wtedy Twój serwer / witryna będzie obsługiwać witrynę z dynamicznym linki utworzone na podstawie nieprawidłowego adresu URL. Jeśli korzystasz z tej drugiej metody, powinieneś również skonfigurowaćvhost
lub ustawić.htaccess
regułę wymuszającą domenę, którą chcesz obsługiwać, na przykład:Mam nadzieję, że to pomoże. Prawdziwym celem tej odpowiedzi było po prostu podanie pierwszej linii kodu dla tych osób, które znalazły się tutaj, szukając sposobu na uzyskanie pełnego adresu URL za pomocą apache :)
źródło
$_SERVER['HTTP_HOST']
zamiast$_SERVER['SERVER_NAME']
. Jeśli istnieje konfiguracja hosta wirtualnego, SERVER_NAME pokaże tę nazwę. Może to być coś takiego,*.example.com
co nie jest ważne.$_SERVER['REQUEST_URI']
nie działa w usługach IIS, ale znalazłem to: http://neosmart.net/blog/2006/100-apache-compliant-request_uri-for-iis-and-windows/, co brzmi obiecująco.źródło
Użyj tej klasy, aby uzyskać adres URL.
źródło
Dodaj:
Następnie po prostu wywołaj
my_url
funkcję.źródło
Używam następującej funkcji, aby uzyskać bieżący, pełny adres URL. To powinno działać w usługach IIS i Apache.
źródło
$query = isset($_SERVER['argv']) ? substr($_SERVER['argv'][0], strpos($_SERVER['argv'][0], ';') + 1) : '';
. Zaktualizowałem twoją odpowiedź, aby to uwzględnić.REQUEST_URI jest ustawiane przez Apache, więc nie dostaniesz go z IIS. Spróbuj wykonać var_dump lub print_r na $ _SERVER i zobacz, jakie wartości tam istnieją, których możesz użyć.
źródło
Część adresu URL zawierająca posttitle znajduje się po
index.php
pliku, co jest powszechnym sposobem dostarczania przyjaznych adresów URL bez używania mod_rewrite. Dlatego tytuł posta jest w rzeczywistości częścią ciągu zapytania, więc powinieneś być w stanie go pobrać za pomocą $ _SERVER ['QUERY_STRING']źródło
Użyj następującego wiersza u góry strony PHP, na której używasz
$_SERVER['REQUEST_URI']
. To rozwiąże Twój problem.źródło
Och, zabawa z fragmentu!
Ma piękne zwroty, takie jak:
źródło
Wszyscy zapomnieli http_build_url ?
Gdy nie zostaną przekazane żadne parametry
http_build_url
, automatycznie przyjmie aktualny adres URL. SpodziewałbymREQUEST_URI
się, że zostanie uwzględniony, choć wydaje się, że jest to wymagane w celu uwzględnienia parametrów GET.Powyższy przykład zwróci pełny adres URL.
źródło
Użyłem następującego kodu i otrzymuję właściwy wynik ...
źródło
Na moim serwerze Apache otrzymuję pełny adres URL w dokładnym formacie, którego szukasz:
źródło
Obsługa Reverse Proxy!
Coś bardziej wytrzymałego. Uwaga To będzie działać tylko na
5.3
lub nowszym.źródło