Правило mod_rewrite не работает, но у меня правильный синтаксис - PullRequest
0 голосов
/ 27 февраля 2020

Так что мое правило mod_rewrite не работает, чтобы указать файл c php для URL.

Options -Indexes
php_value short_open_tag 1

#Caching
# 1 HOUR
<FilesMatch "\.(ico|pdf|flv)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>

# 1 HOUR
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>

# 1 HOUR
<FilesMatch "\.(xml|txt|css|js)$">
Header set Cache-Control "max-age=31536000, proxy-revalidate"
</FilesMatch>


<IfModule mod_rewrite.c>
#Rewrite rules
RewriteEngine on

RewriteRule ^about\/special-offers\/?$ about/special-offers.php


# remove www. from all domains
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]

# Add trailing slash
# TODO: This breaks POST data when forwarding to a URL without an ending slash
#RewriteCond %{REQUEST_URI}  !\.(php|html?|gif|jpe?g|JPE?G|png|bmp|js|swf|css|ico|xml|txt|woff2|woff)$
#RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [P,R=301]

# hide .svn folders
RewriteRule ^(.*/)*\.svn/ / [NC,L]

# send all images and misc files to the actual location
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule \.(gif|jpe?g|JPE?G|png|bmp|js|swf|ico|xml|txt) index.php [NC,L]

# send folder to the relevant php file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ $1/$2.php
RewriteRule ^([^/]+)\/([^/]+)\/ $1/$2.php

#RewriteRule ^([^/]+)/([^/]+)/$ $1/$2.php
RewriteRule ^([^/]+)/([^/]+)/$ $1/default.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

# otherwise if the file or directory is not found, process through the index
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
</IfModule>

У меня есть множество других правил, я могу опубликовать их, если нужно, но так как это конкретное правило c, я не знаю, почему один из них переопределит его. Направление приветствуется.

Я пытался поместить его в верхнюю или нижнюю часть моего раздела mod_rewrite, но ни один из них, похоже, не оказывает никакого влияния.

Что-то, что я только что заметил, - это то, что когда я go до /about/special-offers/x (где x - любая строка), он загружает правильную страницу.

Other

1 Ответ

0 голосов
/ 29 февраля 2020

Наконец-то исправив эту проблему, я сделал это, пометив RewriteRule как final с [L].

Соответствующая часть:

# send folder to the relevant php file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)\/([^/]+)\/ $1/$2.php [L]
...