#apache #mod-rewrite
Вопрос:
Мне нужно обновить URL-адрес старого веб-сайта, удалив пробел в конце
В настоящее время веб-сайт обслуживается (например) : http://myhost.com/mysite/ и я хотел бы, чтобы это стало http://myhost.com/mysite
Сайт хранится в физическом каталоге /home/user1/mysiteapp, в то время как mysite является псевдонимом
Вот мои файлы конфигурации
Файл местоположения
DeflateFilterNote Ratio ratio
DeflateCompressionLevel 7
<Location "/mysite/">
Options None
AllowOverride None
Order deny,allow
Options FollowSymLinks
Allow from all
# mod_deflate
#AddOutputFilterByType DEFLATE text/html text/plain text/xml
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .pdf$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>
# Angular
Alias /mysite /home/user1/mysiteapp
<Directory "/home/user1/mysiteapp">
Options None
AllowOverride all
Order allow,deny
Allow from all
</Directory>
Файл VH
<VirtualHost *:80>
ServerName myhost.com
ServerAlias mysite
DocumentRoot "/usr/local/apache/htdocs"
# Log config
CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/access-mysite.%Y-%m-%d.log 86400" combined env=!dontlog
ErrorLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/error-mysite.%Y-%m-%d.log 86400"
<Directory />
Order deny,allow
Allow from all
Options FollowSymLinks
AllowOverride All
</Directory>
EnableMCPMReceive
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^STATUS.*$
RewriteCond %{REQUEST_METHOD} !^INFO.*$
RewriteCond %{REQUEST_METHOD} !^CONFIG.*$
RewriteCond %{REQUEST_METHOD} !^ENABLE-APP$
RewriteCond %{REQUEST_METHOD} !^DISABLE-APP$
RewriteCond %{REQUEST_METHOD} !^STOP-APP$
RewriteCond %{REQUEST_METHOD} !^STOP-APP-RSP$
RewriteCond %{REQUEST_METHOD} !^REMOVE-APP$
RewriteCond %{REQUEST_METHOD} !^STATUS-RSP$
RewriteCond %{REQUEST_METHOD} !^INFO-RSP$
RewriteCond %{REQUEST_METHOD} !^DUMP$
RewriteCond %{REQUEST_METHOD} !^DUMP-RSP$
RewriteCond %{REQUEST_METHOD} !^PING$
RewriteCond %{REQUEST_METHOD} !^PING-RSP$
RewriteCond %{REQUEST_URI} !^/test.html.*$
RewriteCond %{REQUEST_URI} !^/cgi-bin.*$
RewriteCond %{REQUEST_URI} !^/mod_cluster_manager/.*$
RewriteCond %{REQUEST_URI} !^/server-status/.*$
RewriteCond %{REQUEST_URI} !^/maintenance.html$
RewriteCond %{REQUEST_URI} !^/static_mysite/.*$
RewriteCond %{REQUEST_URI} !^/mysite/.*$
RewriteRule ^(.*)/$ /mysite/ [R=302,L,NE]
</VirtualHost>
htaccess inside /home/user1/mysiteapp
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /mysite/
RewriteRule ^index.html$ -[L]
RewriteRule ^refresh.html$ -[L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]
</IfModule>
index.html inside /home/user1/mysiteapp
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<title>My Site</title>
<base href="/mysite/"> <meta content="width=device-width, initial-scale=1" name="viewport" />
<link href="favicon.png" rel="shortcut icon" type="image/png" />
<link rel="stylesheet" href="styles.css"></head>
<body>
<app-root>
<div class="app-loading">
<div class="lds-ripple">
<div></div>
<div></div>
</div>
</div>
</app-root>
<script src="runtime.js" defer></script><script src="polyfills.js" defer></script><script src="scripts.js" defer></script><script src="main.js" defer></script></body>
</html>
I tried everything :
- removing trailing slash in all mysite/ occurences inside the conf files above but then i get a 404
- добавление правил :
RewriteRule ^(.*)/$ /$1 [R=301,L]
илиRedirectMatch ^/(.*?)/$ /$1
, но затем я получаю «слишком много ошибок при перенаправлении» (но, возможно, я их потерял) - добавление DirectorySlash отключено в конфигурации местоположения, но это не имеет никакого эффекта
Как я могу решить эту проблему, пожалуйста ? Большое спасибо
РЕДАКТИРОВАТЬ : я попытался использовать один и простой сайт, чтобы проверить конфигурацию apache по умолчанию, и кажется, что apache действительно добавляет конечное пространство для каждого сайта
#--------------#
# DEFAULT : IP #
#--------------#
#NameVirtualHost *:80
<VirtualHost *:80>
ServerName testapp.com
ServerAlias testapp
DocumentRoot "/home/test_app"
Alias /testapp /home/test_app
<Directory "/home/test_app">
Options None
AllowOverride all
Order allow,deny
Allow from all
</Directory>
# working
<Location /testapp/ >
# not working : 404
<Location /testapp>
DirectorySlash Off
</Location>
</VirtualHost>
Также почему местоположение работает только путем добавления завершающей косой черты в конце и больше не работает, удалив ее (404) . Существует ли собственная конфигурация, о которой я не знаю ?
Комментарии:
1. Является
/mysite
ли физический каталог? Хотя, как ни странно, существуют разные примеры «mysite»… существует URL-путь «/mysite», который является псевдонимом «/home/user1/mysiteapp», но, похоже, в нем есть физический каталог/home/user1/mysiteapp/mysite
? «index.html внутри /home/user1/mysiteapp» — Хотя.htaccess
файл, похоже, переписывает запросы на/home/user1/mysiteapp/mysite/index.html
? Как включается «файл местоположения»? Почему это не часть хоста? Просто любопытно, по какой причине вы это делаете? Это чисто косметическое средство?2.@MrWhite Большое вам спасибо за ваш ответ, пожалуйста, я умоляю вас помочь мне, я застрял на этом весь день, лол.
/mysite
это виртуальный хост действительно и/home/user1/mysiteapp
физический каталог, где все хранится местоположение файла включен в концеhttpd.conf
, как это:Include conf/mysite_location/*.conf
Include conf/mysite_vh/*.conf
про то, почему оно структурировано как это, я не могу ответить к сожалению, я при развертывании веб-сайта на своем предприятии собственный веб-сервер, используя некоторые автоматические сценарии, которые будут настройте сайт с пользовательского местоположения и пользовательский файл vhost3. @MrWhite какие-нибудь советы, пожалуйста ? Спасибо