這個賞金已經結束。此問題的答案有資格獲得 100聲望賞金。賞金寬限期在22 小時后結束。 wiltomap希望引起對這個問題的更多關注。
我必須接管一個已由不再存在的同事配置的內部 Web 服務器。我們的開發團隊要求我將應用程式 URL 從別名轉換為Virtualhosts(子域命名)系統。例如:
https://srv-intra.mydomain.fr/basecolldev
應該成為
https://basecolldev.mydomain.fr
環境規格:
- Linux OpenSUSE Leap 15.3
- 服務器版本:Apache/2.4.51 (Linux/SUSE)
- PHP 7.4.6 (cli) (NTS)
問題描述:盡管 access_log 檔案中顯示了一些 404 錯誤,但我仍然可以連接https://basecolldev.mydomain.fr(請參閱帖子末尾)。單擊重定向到的登錄按鈕時,我會出現 404 錯誤頁面https://basecolldev.mydomain.fr/login。當我手動將 URL 修改為https://basecolldev.mydomain.fr/index.php/login. 這意味著/index.php主頁連接不需要,但用于瀏覽網站。我需要永久阻止/index.php后綴出現在 URL 中。
我在下面描述了我到目前為止配置的內容以及仍然不起作用的內容。
我首先創建了一個新的虛擬主機檔案/etc/apache2/vhost.d/basecolldev-ssl.conf:
<VirtualHost basecolldev.mydomain.fr:443>
DocumentRoot "/var/www/BaseCollDev/public"
ServerName basecolldev.mydomain.fr
ErrorLog /var/log/apache2/basecolldev-error_log
TransferLog /var/log/apache2/basecolldev-access_log
LogLevel alert rewrite:trace8
<Directory /var/www/BaseCollDev/public>
#Order allow,deny
#allow from all
#AllowOverride All
Require all granted
Options -Indexes -Includes -ExecCGI -FollowSymlinks
</Directory>
</VirtualHost>
然后我Directory在檔案中注釋了與應用程式標簽相關的行/etc/apache2/default-server.conf:
DocumentRoot "/var/www"
<Directory "/var/www">
Options FollowSymLinks
AllowOverride None
<IfModule !mod_access_compat.c>
Require all granted
</IfModule>
<IfModule mod_access_compat.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
Alias /icons/ "/usr/share/apache2/icons/"
Alias /phpmyadmin "/srv/www/htdocs/phpMyAdmin"
<Directory "/usr/share/apache2/icons">
Options Indexes MultiViews
AllowOverride None
<IfModule !mod_access_compat.c>
Require all granted
</IfModule>
<IfModule mod_access_compat.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
#<Directory "/var/www/BaseCollDev/public">
# AllowOverride All
# Require all granted
#</Directory>
ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"
<Directory "/srv/www/cgi-bin">
AllowOverride None
Options ExecCGI -Includes
<IfModule !mod_access_compat.c>
Require all granted
</IfModule>
<IfModule mod_access_compat.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
<IfModule mod_userdir.c>
UserDir public_html
Include /etc/apache2/mod_userdir.conf
</IfModule>
IncludeOptional /etc/apache2/conf.d/*.conf
IncludeOptional /etc/apache2/conf.d/apache2-manual?conf
/var/log/apache2/basecolldev-access_log從與主頁連接相關的檔案中提取:
10.9.4.140 - - [03/Jun/2022:11:02:31 0200] "GET / HTTP/1.1" 200 54206
10.9.4.140 - - [03/Jun/2022:11:02:31 0200] "GET /build/runtime.d94b3b43.js HTTP/1.1" 200 1505
10.9.4.140 - - [03/Jun/2022:11:02:31 0200] "GET /build/app.13d64c6c.js HTTP/1.1" 200 236
10.9.4.140 - - [03/Jun/2022:11:02:31 0200] "GET /build/2.9935185b.css HTTP/1.1" 200 64639
10.9.4.140 - - [03/Jun/2022:11:02:31 0200] "GET /build/app.6cefaab5.css HTTP/1.1" 200 163752
10.9.4.140 - - [03/Jun/2022:11:02:31 0200] "GET /build/2.28b18d57.js HTTP/1.1" 200 261268
10.9.4.140 - - [03/Jun/2022:11:02:31 0200] "GET /build/images/logoEdVBlanc.png HTTP/1.1" 200 6579
10.9.4.140 - - [03/Jun/2022:11:02:31 0200] "GET /_wdt/b07606 HTTP/1.1" 404 1280
10.9.4.140 - - [03/Jun/2022:11:02:31 0200] "GET /build/fonts/fa-solid-900.e8a427e1.woff2 HTTP/1.1" 200 78196
10.9.4.140 - - [03/Jun/2022:11:02:32 0200] "GET /favicon.ico HTTP/1.1" 404 1280
10.9.4.140 - - [03/Jun/2022:11:02:32 0200] "GET /_wdt/b07606 HTTP/1.1" 404 1280
10.9.4.140 - - [03/Jun/2022:11:02:33 0200] "GET /_wdt/b07606 HTTP/1.1" 404 1280
10.9.4.140 - - [03/Jun/2022:11:02:34 0200] "GET /_wdt/b07606 HTTP/1.1" 404 1280
10.9.4.140 - - [03/Jun/2022:11:02:35 0200] "GET /_wdt/b07606 HTTP/1.1" 404 1280
/var/log/apache2/basecolldev-access_log從與登錄頁面連接相關的檔案中提取:
10.9.4.140 - - [03/Jun/2022:11:03:47 0200] "GET /login HTTP/1.1" 404 1280
/var/log/apache2/basecolldev-error_log我在檔案中看不到任何日志。
.htaccess如有必要,我會附上檔案內容。
檔案/var/www/.htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
檔案/var/www/BaseCollDev/public/.htaccess:
DirectoryIndex index.php
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$0 ^(/. )/(.*)::\2$
RewriteRule .* - [E=BASE:%1]
RewriteCond %{HTTP:Authorization} .
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 307 ^/$ /index.php/
</IfModule>
</IfModule>
uj5u.com熱心網友回復:
你AllowOverride None在你的<Directory "/var/www">. 這意味著您的.htaccess檔案,因此您的 mod_rewrite 配置沒有被讀取。最簡單的選項是AllowOverride All(如果需要,您也可以指定特定的覆寫)。
您還需要允許以下符號鏈接(洗掉-FollowSymlinks,可能添加 FollowSymlinks)。
uj5u.com熱心網友回復:
我最終設法通過以下方式使其發揮作用:
檔案/etc/apache2/default-server.conf> 更改Allow Override為All:
<Directory "/var/www">
...
AllowOverride All
...
</Directory>
檔案/etc/apache2/vhosts.d/basecoll-ssl.conf> 洗掉-FollowSymlinks選項:
<VirtualHost basecolldev.mydomain.fr:443>
...
<Directory /var/www/BaseCollDev/public>
...
Options -Indexes -Includes -ExecCGI
...
</Directory>
</VirtualHost>
感謝您幫助我走上正確的道路!
uj5u.com熱心網友回復:
使用 AliasMatch 代替 Alias:
AliasMatch ^/bar/?(.*) /var/www/bar/$1
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/490502.html
