Mam problemy z uruchomieniem witryny Wordpress w podfolderze. Struktura jest następująca:
home
.htaccess
- folder1
- wp
- folder2
- another wp (not important for this)
.Htaccess:
<IfModule mod_rewrite.c>
RewriteEngine on
# non-www domain
RewriteCond %{REQUEST_URI} !^/folder1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /folder1/$1
RewriteCond %{HTTP_HOST} ^(www.)?domain.tld$
RewriteRule ^(/)?$ folder1/index.php [L]
To działa dobrze. Za każdym razem, gdy wpisuję w przeglądarce nazwę domain.tld, jestem przekierowywany do pliku index.php w folderze 1. Ale to nie robi sztuczki dla www.domain.tld. W tym przypadku otrzymuję:
403 Zabronione Nie masz uprawnień dostępu / na tym serwerze.
Czy ktoś ma pomysł, jaki rodzaj kodu .htaccess przekieruje poprawnie wszystkich użytkowników www.domain.tld?
Odpowiedzi:
0 dla odpowiedzi № 1Twój .htaccess
plik jest w porządku. Skonfigurowałem maszynę wirtualną z Debianem, zainstalowałem serwer WWW Apache i skonfigurowałem strukturę folderów tak jak ty:
@ /var/www/domain.tld
20:18:12 $ ls -laR
.:
total 16
drwxr-xr-x 3 root root 4096 Jan 17 20:16 .
drwxr-xr-x 32 root root 4096 Jan 17 20:10 ..
drwxr-xr-x 2 root root 4096 Jan 17 20:11 folder1
-rw-r--r-- 1 root root 295 Jan 17 20:09 .htaccess
./folder1:
total 12
drwxr-xr-x 2 root root 4096 Jan 17 20:11 .
drwxr-xr-x 3 root root 4096 Jan 17 20:16 ..
-rw-r--r-- 1 root root 22 Jan 17 20:06 index.php
Skonfigurowałem Apache w następujący sposób:
<VirtualHost *:80>
DocumentRoot /var/www/domain.tld
ServerName domain.tld
ServerAlias www.domain.tld
TransferLog /var/log/apache2/domain_tld_access.log
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/domain.tld>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/domain_tld_error.log
LogLevel warn
CustomLog /var/log/apache2/domain_tld_access.log combined
</VirtualHost>
The .htaccess
plik jest identyczny z twoim:
@ /var/www/domain.tld
20:18:37 $ cat .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
# non-www domain
RewriteCond %{REQUEST_URI} !^/folder1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /folder1/$1
RewriteCond %{HTTP_HOST} ^(www.)?domain.tld$
RewriteRule ^(/)?$ folder1/index.php [L]
Plik PHP po prostu wyświetli „test”:
@ /var/www/domain.tld
20:19:18 $ cat folder1/index.php
<?php
echo "test";
?>
Skonfigurowałem mój komputer z systemem Windows tak, aby domain.tld
można faktycznie rozwiązać. Zredagowałem plik C:WindowsSystem32driversetchosts
aby zawierać adres IP maszyny wirtualnej:
192.168.178.36 domain.tld
192.168.178.36 www.domain.tld
I to działa: